ปล่อย MFMAilComposeViewController หลังจากปัจจุบัน ModalViewController: ขัดข้อง

ฉันมีบล็อกโค้ดต่อไปนี้ซึ่งทำงานได้ดีในเครื่องจำลองและบนอุปกรณ์ส่วนใหญ่ บนอุปกรณ์บางตัว (ทั้งหมดบน 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)


ฉันมีปัญหาเดียวกันนี้ทุกประการ และฉันไม่รู้ว่าทำไมมันถึงพัง เพราะปัจจุบัน ModalViewController ควรจะคงตัวควบคุมมุมมองไว้ หลังจากต่อสู้กับมัน ในที่สุดฉันก็เพิ่มคุณสมบัติบนตัวควบคุมมุมมองของฉันซึ่งยังคงการอ้างอิงถึง 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