2017-01-16 7 views
1

これは、私がすでに数時間かけて研究し、アプリがクラッシュしている理由を理解しようとしていることで、ごくわずかな問題です。MFMailComposeViewController iOS 10.2のpresentViewControllerでクラッシュする

私は2つのビューコントローラVC1、VC2を持っていて、VC2からMFMailComposeViewControllerを呼び出しています。

は、これまでのところ私はUINavigationController(rootViewController: vc2)

Storyboard ID経由Storyboard ID

  • 経由performSegueIdentifier
  • 経由.. VC2にVC1から

    1. を移行しようとしたが、何も働きました。私はさらにVC2にUINavigationViewControllerを埋め込もうとしましたが、運はありませんでした。

      は以下

      @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(["[email protected]"]) 
          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) 
      } 
      

      すべての店舗やイベントの参照がまた良いですVC2でIBAction方法です。

      クラッシュログ

      [__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' 
      

      を解決:

      問題は、カスタムのナビゲーションバーです。 MFMailComposeViewControllerと表示されたときに、私はUINavigationBarの外観をリセットしています。 This投稿は私がそれを解決するのを助けました。

      グローバルファイルに以下の2つのメソッドを作成しました。

      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

    Strange!私の推測では、UIAppearanceで何か(フォント?)をひどく設定していて、この外観プロパティが初めて参照されるのはメール作曲家だと思います。あなたのプロジェクトでUIAの演出(例:UINavigationBar.appearance)を使用していますか?もしそうなら、今すぐコメントしてください。それが問題を解決するかどうかを確認して、どの呼び出しが原因であるかを把握します。

    +0

    はい、私はカスタムビューでカスタムナビゲーションバーを作成しました。これはVC2になければなりません。私はあなたが言ったことに同意し、カスタムナビゲーションバーを削除しますが、VC2バーに影響を与えずにメールコンポーザーのカスタムナビゲーションバーのみを削除するにはどうすればいいですか? –

    +0

    そして、私が 'AppDelegate'の' UINavigationBar.appearance() 'をコメントアウトしたときにうまくいきました。 –

    +1

    解決策を見つけました。この投稿は私がそれを解決するのに役立ちましたhttp://stackoverflow.com/questions/15580405/override-uiappearance-property-for-mfmailcomviewviewcontroller私は正しい方向を指してくれてありがとう! –

    関連する問題