ios - messageComposeViewController 消除崩溃 swift 3

标签 ios xcode swift3 mfmessagecomposeviewcontroller

在我的应用程序上,我通过短信发送警报。我尝试打开一个新的 View Controller 作为模态,并在其中发送了警报。 但是,当发送短信或用户单击取消按钮时,messageComposeViewController 不会关闭,并会崩溃。

xcode 日志中的错误是:

(lldb)

Crash

这是我用来发送警报的代码:

import UIKit
import CoreLocation
import Social
import MessageUI
import BRYXBanner

class AlertInProgressViewController: UIViewController, MFMessageComposeViewControllerDelegate, CLLocationManagerDelegate {
[... Code here ...]

func sms()
    {
        //Send sms
        if(sms_exist()==true)
        {
            if( CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse || CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways)

            {

                locationManager.delegate = self
                locationManager.desiredAccuracy = kCLLocationAccuracyBest
                locationManager.requestWhenInUseAuthorization()
                locationManager.startUpdatingLocation()
                locationManager.startUpdatingHeading()


                let mlocation = self.locationManager.location

                if mlocation != nil {

                    let latitude: Double = mlocation!.coordinate.latitude
                    let longitude: Double = mlocation!.coordinate.longitude
                    let latitude_convert:String =  String(format:"%f", latitude)
                    let longitude_convert:String =  String(format:"%f", longitude)
                    let location = number_street + " " + ville + "\nLatitude " + latitude_convert + " - Longitude : " + longitude_convert
                    let geoCoder = CLGeocoder()
                    let location_details = CLLocation(latitude: mlocation!.coordinate.latitude, longitude: mlocation!.coordinate.longitude)
                    geoCoder.reverseGeocodeLocation(location_details)
                    {
                        (placemarks, error) -> Void in

                        let placeArray = placemarks as [CLPlacemark]!

                        // Place details
                        var placeMark: CLPlacemark!
                        placeMark = placeArray?[0]

                        // Address dictionary
                        print(placeMark.addressDictionary)

                        // Location name
                        if let locationName = placeMark.addressDictionary?["Name"] as? NSString
                        {
                            print(locationName)
                            self.details_location = locationName as String
                        }
                        if let city = placeMark.addressDictionary?["City"] as? NSString
                        {
                            self.city = city as String
                        }

                        self.message = NSLocalizedString("IN_DANGER_TEXT_SHARE",comment:"I'm in danger, I'm currently at  ") + location + "\n - " + self.details_location + " - " + self.city
                        let defaults = UserDefaults.standard
                        let sms_perso = defaults.object(forKey: "sms") as? String

                    if(MFMessageComposeViewController.canSendText()) {
                            let controller = MFMessageComposeViewController()
                            controller.body = self.message
                            controller.recipients = [sms_perso!]
                            controller.messageComposeDelegate = self
                            self.present(controller, animated: true, completion: nil)
                        }
                        else
                        {
                            print("Can't send sms")
                        }


                    }
                }
            }


        }

    }
[...]
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {

        //Original code but doesn't work too
        //self.dismiss(animated: true, completion: nil)
        OperationQueue.main.addOperation {
            self.dismiss(animated: true, completion: {});
        }
        print("I want to dismiss here")
    }
}

在 xcode 日志中,我可以看到:我想在这里关闭,因此调用了 messageComposeViewController 但在它崩溃之后。

为了显示 AlertInProgressViewController,我使用了 Storyboard转场。

最佳答案

我通过改变这个来解决我的问题:

self.dismiss(animated: true, completion: {});

controller.dismiss(animated: true, completion: nil)

关于ios - messageComposeViewController 消除崩溃 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42785801/

相关文章:

generics - Swift 3 需要更多信息来推断参数?

objective-c - 从打开附件 View 的 UITableView 存储值的最有效方法

iPhone UIScrollView ContentSize 在旋转/转换为横向时有额外的高度

html - 字体颜色不起作用

swift - Xcode 构建完美失败——找不到 COpenSSL

ios - 脏内存解决方案 Xcode & Instruments

ios - 如何在 Swift 中使用字典构建 URL

ios - 是什么导致 AVMutableComposition 大幅增加视频的大小? - iOS、 swift 、AVFoundation

iOS instagram api 无法登录(可疑登录尝试)

iOS 方向更新问题