应用程序尝试在发送文本时在目标上显示nil模态视图控制器

Raf*_*afa 2 ios mfmessagecomposeviewcontroller swift

我正在尝试发送短信并设置控制器,但是我得到了一条错误消息'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <Ally.TextMessageController: 0x7fd5361278e0>.'我已经确保在我的故事板中我将它连接到TextMessageController所以我不太清楚是什么导致了崩溃.

class TextMessageController: UIViewController, MFMessageComposeViewControllerDelegate {

    var phone: String?
    override func viewDidLoad() {
        super.viewDidLoad()



        print(phone)
        var messageVC = MFMessageComposeViewController()

        messageVC.body = "Hey I need help, are you available";
        messageVC.recipients = ["555555555"]
        messageVC.messageComposeDelegate = self;

        presentViewController(messageVC, animated: false, completion: nil)

        // Do any additional setup after loading the view.
    }


    func canSendText() -> Bool {
        return MFMessageComposeViewController.canSendText()
    }

    func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {

        self.dismissViewControllerAnimated(true, completion: nil)
        switch (result.rawValue) {
        case MessageComposeResultCancelled.rawValue:
            print("Message was cancelled")
            self.dismissViewControllerAnimated(true, completion: nil)
        case MessageComposeResultFailed.rawValue:
            print("Message failed")
            self.dismissViewControllerAnimated(true, completion: nil)
        case MessageComposeResultSent.rawValue:
            print("Message was sent")
            self.dismissViewControllerAnimated(true, completion: nil)
        default:
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是错误消息

'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <Ally.TextMessageController: 0x7fd5361278e0>.'
Run Code Online (Sandbox Code Playgroud)

Vis*_*kar 11

您应首先检查设备是否可以发送文本消息,然后仅显示它.例如,模拟器无法发送文本消息,因此您的代码将崩溃.与模拟器一起,可能无法设置用户的设备来传递消息.所以执行以下检查

if messageVC.canSendText() {
    presentViewController(messageVC, animated: false, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)