Вы должны полагаться на iOS, что MFMailComposeResult
, который возвращается в mailComposeController:didFinishWithResult:error:
, является правильным.Симулятор подделывает этот результат;фактическое письмо не отправляется, хотя в нем указано MFMailComposeResultSent
.
В упомянутом руководстве пропущен важный момент : первое, что вы должны сделать перед использованием MFMailComposeViewController
, это проверить [MFMailComposeViewController canSendMail]
.Это вернет NO
, если пользователь не настроил почту на своем устройстве.Если вы должны поддерживать версию iOS до 3.0, правильный способ - проверить, существует ли класс MFMailComposeViewController
:
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
if ([mailClass canSendMail])
{
[self displayComposerSheet];
}
else
{
[self launchMailAppOnDevice];
}
}
else
{
[self launchMailAppOnDevice];
}
Проблема canSendMail может быть проверена только на реальном устройстве.Сбой произойдет, если вы не проверите canSendMail, и у пользователя не настроена учетная запись электронной почты.