0

我需要发送多条短信,多次提出应用程序消息。但控制台显示此错误:

2016-08-27 19:27:17.237 AlertaTel 2.0[841:263754] Attempt to present <MFMessageComposeViewController: 0x15e19ba00> on <AlertaTel_2_0.ViewController: 0x15de43af0> which is waiting for a delayed presention of <MFMessageComposeViewController: 0x15e24ca00> to complete

我在这个网站上读到了这个问题,但只在 Objective-c 中找到了解决方案或主题,而且老实说甚至没有掌握该语言(我更倾向于 Swfit)。

我附上了我的代码:

类 MessageComposer

class MessageComposer: NSObject, MFMessageComposeViewControllerDelegate {

// A wrapper function to indicate whether or not a text message can be sent from the user's device
func canSendText() -> Bool {
    return MFMessageComposeViewController.canSendText()
}

// Configures and returns a MFMessageComposeViewController instance
func configuredMessageComposeViewController(unicaVariable : String) -> MFMessageComposeViewController {
    let messageComposeVC = MFMessageComposeViewController()
    messageComposeVC.messageComposeDelegate = self  //  Make sure to set this property to self, so that the controller can be dismissed!
    messageComposeVC.recipients = textMessageRecipients
    messageComposeVC.body = "Estoy en peligro, aca esta mi última ubicación: https://maps.google.com/maps?q="+(view.locationManager.location?.coordinate.latitude.description)!+","+(view.locationManager.location?.coordinate.longitude.description)!+". "+(unicaVariable)
    //view.performRequestAndUpdateUI()
    return messageComposeVC

}

// MFMessageComposeViewControllerDelegate callback - dismisses the view controller when the user is finished with it
func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) {
    controller.dismissViewControllerAnimated(true, completion: nil)
}

}

在视图控制器中:

 func levantarMensaje(datoWebService: String){
    if (messageComposer.canSendText()) {
        let messageComposeVC = messageComposer.configuredMessageComposeViewController(datoWebService)
        presentViewController(messageComposeVC, animated: true, completion: nil)

    } else {
        // Let the user know if his/her device isn't able to send text messages

    }
}

我在@IBAction 中调用这个方法:

  @IBAction func sendTextMessageButtonTapped(sender: UIButton) {
    levantarMensaje()
}

当我在 IBAction 上实现一个简单的“FOR”时,会出现上面显示的错误。

非常感谢您的回答,问候!

4

1 回答 1

2

这里发生的情况是,您正在尝试开始一个模态演示,而之前的模态演示仍在动画中。UIKit 不喜欢这样。您需要等到一个演示文稿完成后再开始下一个演示文稿。有几种方法可以做到这一点。

第一个是同时有几个模态演示,但要确保动画不会同时发生。您可以通过将调用更改presentViewController(_:, animated:, completion:)为使用completion参数来呈现下一个消息视图控制器来做到这一点。这样,第一个消息视图就会出现,当它完成动画时,下一个将开始,等等。

另一种方法是等到一条消息发送(或取消)后再呈现下一条消息。为此,您将替换controller.dismissViewControllerAnimated(true, completion: nil)为类似于我上面描述的内容。不要为completion参数传递 nil,而是传递一个显示下一个消息视图的闭包,直到没有剩余。

于 2016-08-28T00:08:32.830 回答