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

时间:2016-02-06 19:25:44

标签: ios swift mfmessagecomposeview

我试图发送短信并设置控制器,但我收到错误消息'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;
        }
    }

以下是错误消息

'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <Ally.TextMessageController: 0x7fd5361278e0>.'

1 个答案:

答案 0 :(得分:11)

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

if messageVC.canSendText() {
    presentViewController(messageVC, animated: false, completion: nil)
}