Выпуск MFMAilComposeViewController после presentModalViewController: вылетает - PullRequest
0 голосов
/ 04 марта 2011

У меня есть следующий блок кода, который отлично работает в симуляторе и на большинстве устройств, однако на некоторых устройствах (все на одной и той же версии iOS 4.2.1) происходит сбой приложения при вызове [mailComposer release], Кто-нибудь знает, почему это происходит?

    MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    mailComposer.mailComposeDelegate = self;
    [mailComposer setSubject:[self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]];
    [mailComposer setMessageBody:[NSString stringWithFormat:@"Hello, \n\n Here is the link we discussed. \n %@", [self.webView.request URL]] isHTML:NO];
    [self presentModalViewController:mailComposer animated:YES];
    [mailComposer release];

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

У меня была точно такая же проблема, и я действительно понятия не имею, почему это может произойти сбой, потому что presentModalViewController должен сохранить контроллер представления. После борьбы с ним, я наконец-то просто добавил свойство в свой контроллер представления, которое сохранило ссылку на mfMailComposeViewController, и оно работало нормально. : /

MFMailComposeViewController* mfMailComposeViewController;
@property (nonatomic, retain) MFMailComposeViewController *mfMailComposeViewController;

тогда ..

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:subject];
[controller setBody:body];
self.mfMailComposeViewController = controller;
[controller release];
0 голосов
/ 13 марта 2011

Хорошо, так что мне удалось выяснить, что стало причиной моей проблемы, с помощью моего нового iPad 2.

Проблема была вызвана отсутствием настроенных учетных записей электронной почты, просто добавив

if ([MFMailComposeViewController canSendMail])

перед созданием и представлением представления предотвращает сбой, в своем блоке else я добавил UIAlertView, чтобы пользователь знал, что он не может получить доступ к этой функции без предварительной настройки учетной записи электронной почты.

...