Ну, это очень незначительная проблема, по которой я уже провел несколько часов, исследуя и пытаясь понять, почему приложение терпит крах.MFMailComposeViewController сбой на presentViewController на iOS 10.2
Предположим, у меня есть два контроллера вида VC1, VC2, и я звоню MFMailComposeViewController
из VC2.
До сих пор я пытался переходить от VC1 к VC2 ..
- через
performSegueIdentifier
- через
Storyboard ID
- через
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
}
Да, я создал настраиваемую панель навигации с пользовательским представлением, она должна быть в VC2. Я согласен с тем, что вы сказали, удалив пользовательскую панель навигации, но как я могу удалить настраиваемую навигационную панель только для композитора почты, не затрагивая панель VC2? –
И да, это сработало, когда я прокомментировал 'UINavigationBar.appearance()' в 'AppDelegate' –
Я понял решение. Этот пост помог мне решить эту проблему http://stackoverflow.com/questions/15580405/override-uiappearance-property-for-mfmailcomposeviewcontroller. Большое спасибо за то, что указали мне в правильном направлении! –