ios – messageComposeViewController解雇崩溃swift 3

在我的应用程序上,我通过短信发送警报.我尝试打开一个新的视图控制器作为模态,并在此发送警报.

但是,当发送短信或用户点击取消按钮时,messageComposeViewController不会解除,并且崩溃.

xcode日志错误是:

(LLDB)

《ios – messageComposeViewController解雇崩溃swift 3》

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

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 segue.

最佳答案 我通过改变这个来解决我的问题:

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

通过

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