Swift 3.0:发送短信错误

Posted

技术标签:

【中文标题】Swift 3.0:发送短信错误【英文标题】:Swift 3.0: Send an SMS Error 【发布时间】:2017-02-16 11:40:06 【问题描述】:

我正在尝试发送短信并使用该代码:

import UIKit
import MessageUI

class ViewController: UIViewController 

override func viewDidLoad() 
super.viewDidLoad()


override func didReceiveMemoryWarning() 
super.didReceiveMemoryWarning()


@IBAction func sendMessage(_ sender: UIButton) 

let messageVC = MFMessageComposeViewController()
messageVC.body = "For a good time call!"
messageVC.recipients = ["79161887060"]
messageVC.messageComposeDelegate = self

self.present(messageVC, animated: true, completion: nil)
  


extension ViewController: MFMessageComposeViewControllerDelegate 
func messageComposeViewController(_ controller:      MFMessageComposeViewController, didFinishWith result: MessageComposeResult)  
switch (result.rawValue) 
case MessageComposeResult.cancelled.rawValue:
  print("Message was cancelled")
  self.dismiss(animated: true, completion: nil)
case MessageComposeResult.failed.rawValue:
  print("Message failed")
  self.dismiss(animated: true, completion: nil)
case MessageComposeResult.sent.rawValue:
  print("Message was sent")
  self.dismiss(animated: true, completion: nil)
default:
  break;



构建成功,但是当我点击按钮(发送短信的操作)时 - 调试器将转到 AppDelegate 文件并停在那里:

日志在这里:

2017-02-16 14:06:13.171616 注册[24422:1035557] bundleid:XLab.Registration,enable_level:0,persist_level:0,propagate_with_activity:0 2017-02-16 14:06:13.172031 注册[24422:1035557] 子系统:com.apple.siri,类别:Intents,enable_level:1,persist_level:1,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2017-02-16 14:06:13.177495 注册[24422:1035645] 子系统:com.apple.UIKit,类别:HIDEventFiltered,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:13.180083 注册[24422:1035645] 子系统:com.apple.UIKit,类别:HIDEventIncoming,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:13.190296 注册[24422:1035635] 子系统:com.apple.BaseBoard,类别:MachPort,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2017-02-16 14:06:13.204079 注册[24422:1035557] 子系统:com.apple.UIKit,类别:StatusBar,enable_level:0,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:13.296657 注册[24422:1035557] 子系统:com.apple.UIKit,类别:GestureEnvironment,enable_level:0,persist_level:0,default_ttl:1,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:13.316493 注册[24422:1035557] 子系统:com.apple.BackBoardServices.fence,类别:App,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0, generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2017-02-16 14:06:14.350494 注册[24422:1035557] 子系统:com.apple.UIKit,类别:Touch,enable_level:0,persist_level:0,default_ttl:1,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:14.351481 注册[24422:1035557] 子系统:com.apple.UIKit,类别:Gesture,enable_level:0,persist_level:0,default_ttl:1,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:14.352214 注册[24422:1035557] 子系统:com.apple.UIKit,类别:GestureExclusion,enable_level:0,persist_level:0,default_ttl:1,info_ttl:0,debug_ttl:0,generate_symptoms: 0,enable_oversize:1,privacy_setting:2,enable_private_data:0 2017-02-16 14:06:14.943772 注册[24422:1035557] 子系统:com.apple.BackBoardServices.fence,类别:观察者,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0, generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2017-02-16 14:06:14.944254 注册[24422:1035557] 子系统:com.apple.BackBoardServices.fence,类别:工作区,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0, generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2017-02-16 14:06:14.944580 注册[24422:1035557] 子系统:com.apple.BackBoardServices.fence,类别:Trace,enable_level:1,persist_level:0,default_ttl:0,info_ttl:0,debug_ttl:0, generate_symptoms:0,enable_oversize:0,privacy_setting:0,enable_private_data:0 2017-02-16 14:06:32.331 注册 [24422:1035557] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在目标上呈现一个 nil 模态视图控制器。” * 首先抛出调用栈: ( 0 CoreFoundation 0x00000001107ad34b 异常预处理 + 171 1 libobjc.A.dylib 0x000000010fdf121e objc_exception_throw + 48 2 UIKit 0x0000000111a4b867-[UIViewController _presentViewController:withAnimationController:completion:] + 5328 3 UIKit 0x0000000111a4e3da __62-[UIViewController presentViewController:animated:completion:]_block_invoke_2 + 70 4 UIKit 0x000000011194fada +[UIView(Animation) performWithoutAnimation:] + 90 5 UIKit 0x0000000111a4e370 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 365 6 UIKit 0x0000000111a4e6df-[UIViewController _performCoordinatedPresentOrDismiss:animated:] + 530 7 UIKit 0x0000000111a4e1c5-[UIViewController presentViewController:animated:completion:] + 179 8 注册 0x000000010f7f13da _TFC12Registration14ViewController17sendSMSBtnClickedfPs9AnyObject_T_ + 1002 9 注册 0x000000010f7f1516 _TToFC12Registration14ViewController17sendSMSBtnClickedfPs9AnyObject_T_ + 54 10 UIKit 0x0000000111898b88-[UIApplication sendAction:to:from:forEvent:] + 83 11 UIKit 0x0000000111a1e2b2-[UIControl sendAction:to:forEvent:] + 67 12 UIKit 0x0000000111a1e5cb-[UIControl_sendActionsForEvents:withEvent:] + 444 13 UIKit 0x0000000111a1d4c7-[UIControl touchesEnded:withEvent:] + 668 14 UIKit 0x00000001119060d5-[UIWindow_sendTouchesForEvent:] + 2747 15 UIKit 0x00000001119077c3 -[UIWindow 发送事件:] + 4011 16 UIKit 0x00000001118b4a33 -[UIApplication 发送事件:] + 371 17 UIKit 0x00000001120a6b6d __dispatchPreprocessedEventFromEventQueue + 3248 18 UIKit 0x000000011209f817 __handleEventQueue + 4879 19 核心基础 0x0000000110752311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 20 核心基础 0x000000011073759c __CFRunLoopDoSources0 + 556 21 核心基础 0x0000000110736a86 __CFRunLoopRun + 918 22 核心基础 0x0000000110736494 CFRunLoopRunSpecific + 420 23 图形服务 0x0000000115a13a6f GSEventRunModal + 161 24 UIKit 0x0000000111896f34 UIApplicationMain + 159 25 注册 0x000000010f7f911f 主要 + 111 26 libdyld.dylib 0x000000011428f68d 开始 + 1 ) libc++abi.dylib:以 NSException 类型的未捕获异常终止

请帮助解决这个问题。有什么想法吗?

也许这个问题是因为我在模拟器上运行脚本,而不是在设备上?

提前致谢!!!

【问题讨论】:

我的第一个建议是检查它是否适用于设备。错误是:应用程序试图在目标上呈现一个 nil 模态视图控制器。似乎 messageVC 为 nil 或无法呈现。可能由于模拟器? 谢谢。我正在尝试这样做 【参考方案1】:

您可以使用此代码。它已经过测试并且运行良好

@IBAction func sendMessage(_ sender: UIButton) 
    
        if (MFMessageComposeViewController.canSendText()) 
            let messageVC = MFMessageComposeViewController()
            messageVC.body = "For a good time call!"
            messageVC.recipients = ["79161887060"]
            messageVC.messageComposeDelegate = self
            self.presentViewController(messageVC, animated: true, completion: nil)
        
   

【讨论】:

这行得通,我用同样的方法。自然它不会在模拟器上工作,因为 canSendText 是错误的。但如果设备没有短信,至少不会崩溃。

以上是关于Swift 3.0:发送短信错误的主要内容,如果未能解决你的问题,请参考以下文章

在 ios8 中使用 swift 语言发送短信

苹果手机 |通过简单的短信发送电子名片

接入腾讯云短信服务(史上最详细+该短信服务如何申请成功+发送短信验证码API讲解+相关错误分析)

从服务内发送短信[重复]

使用 phonegap 发送短信

使用 Alamofire 的 swift 3.0 中的 URL 问题