Ответ 1
Проблема заключается в симуляторе, на реальном устройстве почтовый композитор работает правильно.
Я не могу открыть MFMailComposeViewController, не бросая фатальную ошибку в iOS 9 Simulator.
Тот же код (Objective C) работает безупречно в iOS 8.x и ниже, но сегодня я установил Xcode 7 beta 5, и когда я запустил приложение на iOS 9 Simulator, я получил диалоговое окно под названием "MailCompositionService неожиданно завершено" и когда я просматриваю отчет об ошибке, я вижу:
Информация о приложении: *** Завершение приложения из-за неотображенного исключения "NSInvalidArgumentException", причина: '- [__ NSArrayI isEqualToString:]: непризнанный селектор, отправленный экземпляру 0x7fd314280b10'
завершение с неперехваченным исключением типа NSException abort() CoreSimulator 179 - Устройство: iPhone 6 - Runtime: iOS 9.0 (13A4325c) - Тип устройства: iPhone 6
Ошибка при представлении композиции композиции. Он зависает в течение нескольких секунд, а затем появляется диалоговое окно с ошибкой.
Код, который открывает представление состава почты, это:
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Comment title"];
[picker setMessageBody:@"Comment description" isHTML:NO];
[self.window.rootViewController presentModalViewController:picker animated:YES];
[picker release];
}
Если это помогает узнать, перед сбоем приложения, mailComposeController:didFinishWithResult:error:
вызывается с result
= MFMailComposeResultCancelled
и error
= nil
.
Буду признателен за то, как найти причину этой ошибки. Спасибо!
Проблема заключается в симуляторе, на реальном устройстве почтовый композитор работает правильно.
В соответствии с форумом разработчиков Apple более подробно здесь.
Симулятор не поддерживает почту. Вероятно, вам следует попробовать проверить почту функциональности в устройстве.
Вы должны использовать:
[self.window.rootViewController presentViewController:picker animated:YES completion:NULL];
presentModalViewController DEPRECATED, поскольку ios6 заменен на presentViewController:animated:completion:
то есть: - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);
Я понятия не имею, почему это происходит или как я его обнаружил, авария, похоже, генерируется установкой NSFontAttributeName в прокси-сервере Appearance для панели навигации, если я раскомментирую эту строку, когда приложение сработает.
NSDictionary* format = @{
NSForegroundColorAttributeName:[UIColor whiteColor],
//NSFontAttributeName: [UIFont boldSystemFontOfSize:20],
};
[[UINavigationBar appearance] setTitleTextAttributes:format];
Пожалуйста, попробуйте @Sleiman и посмотрите, исправляет ли это проблему для вас.
Как простая работа для этой проблемы, вы можете использовать протокол mailto, это будет:
Пример в быстрой:
Swift 3.0
let mailRecipient = "[email protected]"
let mailSubject = "Help with ABC for iOS"
let mailBody = "xxx"
let mailTo = "mailto:\(mailRecipient)?subject=\(mailSubject)&body=\(mailBody)"
guard let escapedMailTo = mailTo.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
NSLog("Invalid mail to format")
return
}
guard let url = NSURL(string: escapedMailTo) else {
NSLog("Invalid mail to format: \(escapedMailTo)")
return
}
UIApplication.sharedApplication().openURL(url)
Swift 2.3
let mailRecipient = "[email protected]"
let mailSubject = "Help with ABC for iOS"
let mailBody = "xxx"
let mailTo = "mailto:\(mailRecipient)?subject=\(mailSubject)&body=\(mailBody)"
guard let escapedMailTo = mailTo.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet()) else {
NSLog("Invalid mail to format")
return
}
guard let url = NSURL(string: escapedMailTo) else {
NSLog("Invalid mail to format: \(escapedMailTo)")
return
}
UIApplication.sharedApplication().openURL(url)