Lepaskan MFMAilComposeViewController setelah presentModalViewController: mogok

Saya memiliki blok kode berikut yang berfungsi dengan baik di simulator dan di sebagian besar perangkat, namun di beberapa perangkat (semua di iOS versi 4.2.1 yang sama) aplikasi mogok saat sampai ke panggilan [mailComposer release], apakah ada yang punya wawasan mengapa ini bisa terjadi?

    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 sumber
comment
presentModalViewController mempertahankan pengontrol tampilannya dan melepaskannya saat muncul, jadi saya tidak tahu mengapa hal ini dapat menyebabkan kerusakan.   -  person Jacob Relkin    schedule 04.03.2011
comment
Itu adalah pemahamanku juga, satu hal yang baru saja aku pikirkan. Saya menyajikan tombol Tautan Email di UIActionSheet menggunakan showFromBarButtonItem:animated:. Mungkinkah ada semacam tabrakan UIKit ketika popover itu ditutup dan tampilan modal disajikan?   -  person Chris Wagner    schedule 04.03.2011


Jawaban (2)


Saya punya masalah yang sama persis dan saya benar-benar TIDAK tahu mengapa itu akan crash, karena presentModalViewController seharusnya mempertahankan pengontrol tampilan. Setelah berjuang dengannya, saya akhirnya menambahkan properti pada pengontrol tampilan saya yang mempertahankan referensi ke mfMailComposeViewController dan berfungsi dengan baik. :/

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

Kemudian..

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
Itu menyebalkan! Bukan berarti itu solusi yang buruk, saya berencana melakukan hal yang sama, tetapi sayang sekali Anda harus melakukan itu... Serius tidak masuk akal bagi saya. - person Chris Wagner; 04.03.2011
comment
Terpilih, akan menunggu untuk melihat apakah ada yang bisa memberi penjelasan lebih lanjut. - person Chris Wagner; 04.03.2011

Oke, jadi saya berhasil mencari tahu apa yang menyebabkan masalah saya dengan bantuan iPad 2 baru saya.

Masalah ini disebabkan karena tidak ada akun email yang dikonfigurasi, hanya menambahkan

if ([MFMailComposeViewController canSendMail])

sebelum saya membuat dan menyajikan tampilan mencegah kerusakan, di blok else saya menambahkan UIAlertView untuk memberi tahu pengguna bahwa mereka tidak dapat mengakses fitur itu tanpa terlebih dahulu mengonfigurasi akun email.

person Chris Wagner    schedule 12.03.2011