2017-01-16 11 views
1

Ну, это очень незначительная проблема, по которой я уже провел несколько часов, исследуя и пытаясь понять, почему приложение терпит крах.MFMailComposeViewController сбой на presentViewController на iOS 10.2

Предположим, у меня есть два контроллера вида VC1, VC2, и я звоню MFMailComposeViewController из VC2.

До сих пор я пытался переходить от VC1 к VC2 ..

  1. через performSegueIdentifier
  2. через Storyboard ID
  3. через Storyboard ID с UINavigationController(rootViewController: vc2)

, но ничего не получалось. Я даже пытался встраивать UINavigationViewController в VC2, но не повезло.

Ниже IBAction метод VC2

@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) 
} 

Все выходы и ссылки на событие также хороши.

журнал Краш

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

Странно! Мое предположение заключается в том, что вы неправильно установили что-то (шрифт?) Через UIAppearance, а почтовый композитор впервые ссылается на это свойство внешнего вида. Использует ли ваш проект UIAppearance (например, UINavigationBar.appearance)? Если да, тогда прокомментируйте их. Посмотрите, устраняет ли проблема проблему, затем выясняет, какой вызов является виновником.

+0

Да, я создал настраиваемую панель навигации с пользовательским представлением, она должна быть в VC2. Я согласен с тем, что вы сказали, удалив пользовательскую панель навигации, но как я могу удалить настраиваемую навигационную панель только для композитора почты, не затрагивая панель VC2? –

+0

И да, это сработало, когда я прокомментировал 'UINavigationBar.appearance()' в 'AppDelegate' –

+1

Я понял решение. Этот пост помог мне решить эту проблему http://stackoverflow.com/questions/15580405/override-uiappearance-property-for-mfmailcomposeviewcontroller. Большое спасибо за то, что указали мне в правильном направлении! –