Выпуск MFMAilComposeViewController после presentModalViewController: сбой

У меня есть следующий блок кода, который отлично работает в симуляторе и на большинстве устройств, однако на некоторых устройствах (все на одной и той же версии 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];

person Chris Wagner    schedule 04.03.2011    source источник
comment
presentModalViewController сохраняет свой контроллер представления и освобождает его при извлечении, поэтому я не знаю, почему это может вызвать сбой.   -  person Jacob Relkin    schedule 04.03.2011
comment
Я тоже так понял, я только что подумал. Я представляю кнопку «Ссылка по электронной почте» в UIActionSheet, используя showFromBarButtonItem:animated:. Может ли быть какое-то столкновение UIKit, когда это всплывающее окно отклоняется и отображается модальное представление?   -  person Chris Wagner    schedule 04.03.2011


Ответы (2)


У меня была точно такая же проблема, и я действительно НЕ ПОНИМАЮ, почему она выйдет из строя, потому что предполагается, что 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];
person Kenny Wyland    schedule 04.03.2011
comment
Это отстой! Не то, чтобы это было плохим решением, я планировал сделать то же самое, но просто глупо, что вы должны это делать... Серьезно, для меня это не имеет смысла. - person Chris Wagner; 04.03.2011
comment
Проголосовал за, подожду, чтобы увидеть, может ли кто-нибудь пролить еще немного света. - person Chris Wagner; 04.03.2011

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

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

if ([MFMailComposeViewController canSendMail])

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

person Chris Wagner    schedule 12.03.2011