我不能在 Swift 中调用多个应用程序消息

Posted

技术标签:

【中文标题】我不能在 Swift 中调用多个应用程序消息【英文标题】:I can not call more than one application message in Swift 【发布时间】:2016-08-27 23:06:31 【问题描述】:

我需要发送多条短信,多次提出申请信息。 但控制台显示此错误:

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”时,会出现上面显示的错误。

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

【问题讨论】:

错误完成是:2016-08-27 19:27:17.237 AlertaTel 2.0[841:263754] 尝试在 上呈现 正在等待 的延迟呈现完成 【参考方案1】:

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

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

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

【讨论】:

以上是关于我不能在 Swift 中调用多个应用程序消息的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 Swift5 中读取推送消息数据?

Swift:多个函数同时工作

通过 Firebase 函数发送的 Swift 中的加密推送通知

不能在代码中调用 segue (Swift)

跨进程共享状态变量

使用 Swift 在 iOS 中远程控制事件