MFMailComposeViewController在iOS 10.2

时间:2017-01-16 23:20:02

标签: ios swift mfmailcomposeviewcontroller messageui

嗯,这是一个非常小的问题,我已经花了几个小时研究并试图弄清楚应用程序崩溃的原因。

假设我有两个视图控制器VC1,VC2,我正在从VC2调用MFMailComposeViewController

到目前为止,我已尝试从VC1过渡到VC2 ..

  1. 通过performSegueIdentifier
  2. 通过Storyboard ID
  3. 通过Storyboard IDUINavigationController(rootViewController: vc2)
  4. 但没有任何效果。我甚至尝试将UINavigationViewController嵌入到VC2中,但也没有运气。

    以下是VC2中的IBAction方法

    @IBAction func sendEmail(sender: AnyObject) {
        if MFMailComposeViewController.canSendMail() {
            let mailComposerVC = configuredMailComposeViewController()
            presentViewController(mailComposerVC, animated: true, completion: nil) // CRASH
        } else {
            showSendMailErrorAlert()
        }
    }
    
    
    func configuredMailComposeViewController() -> MFMailComposeViewController {
    
        let mailComposerVC = MFMailComposeViewController()
        mailComposerVC.mailComposeDelegate = self
    
        mailComposerVC.setToRecipients(["abc@abc.com"])
        mailComposerVC.setSubject("Reg: ")
    
        return mailComposerVC
    }
    
    func showSendMailErrorAlert() {
        let alert = UIAlertController(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", preferredStyle: .Alert)
        presentViewController(alert, animated: true, completion: nil)
    }
    

    所有商店和活动参考也都很好。

    崩溃日志

    [__NSCFNumber pointSize]: unrecognized selector sent to instance 0xb0000000000000e5
    2017-01-16 16:52:55.887082 Sample[2507:671461] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber pointSize]: unrecognized selector sent to instance 0xb0000000000000e5'
    

    解决

    问题在于自定义导航栏。我在呈现UINavigationBar时重置MFMailComposeViewController外观并将其重新设置为解除。 This帖子帮我解决了。

    我在全局文件中创建了以下两种方法。

    static func applyGlobalNavigationBarAppearance() {
        UINavigationBar.appearance().barTintColor = UIColor.blueColor()
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName: UIFont.systemFontSize()]
    }
    
    static func applyMailNavigationBarAppearance() {
        UINavigationBar.appearance().barTintColor = UIColor.whiteColor()
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = nil
    }
    

1 个答案:

答案 0 :(得分:1)

奇怪!我的猜测是你通过UIAppearance设置了一些东西(字体?),而邮件编辑器是第一次引用这个外观属性。您的项目是否使用UIAppearance(例如UINavigationBar.appearance)?如果是这样,请暂时将它们评论出来。看看是否能解决问题,然后找出哪个电话是罪魁祸首。