我不能在 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] 尝试在 上呈现这里发生的情况是,您正在尝试开始一个模态演示,而之前的模态演示仍在动画中。 UIKit 不喜欢这样。您需要等到一个演示文稿完成后再开始下一个演示文稿。有几种方法可以做到这一点。
第一个是同时有多个模态演示,但要确保动画不会同时发生。您可以通过将调用更改为presentViewController(_:, animated:, completion:)
来使用completion
参数来呈现下一个消息视图控制器来做到这一点。这样会出现第一个消息视图,动画完成后下一个会开始,依此类推。
另一种方法是等到一条消息发送(或取消)后再呈现下一条消息。为此,您可以将controller.dismissViewControllerAnimated(true, completion: nil)
替换为类似于我上面描述的内容。不要为 completion
参数传递 nil,而是传递一个显示下一个消息视图的闭包,直到没有剩余。
【讨论】:
以上是关于我不能在 Swift 中调用多个应用程序消息的主要内容,如果未能解决你的问题,请参考以下文章