سؤال

لدي تطبيق يستخدم وحدة تحكم عرض الجدول لعرض بعض العناصر، بعد النقر فوق أحد العناصر التي قد تختارها عبر البريد الإلكتروني هذا العنصر. بمجرد حدوث ذلك، استخدم التعليمات البرمجية التي توفرها Apple "mailcomposer"، وإرسال البريد. ومع ذلك، بعد هذا التمرير في عرض الجدول ليس سلسا كما كان من قبل.

لقد راجعت مع "التسريبات" ولا توجد تسربات في التعليمات البرمجية، ومع ذلك، هناك قدر كبير من تخصيص الكائنات عند وحدة تحكم عرض الوسائط ل MfmailcomcomVeyController، وعندما أقوم بإقالة وحدة التحكم الخاصة بي، كل هذا تخصيص الكائنات لا يزال هناك. كيف يمكنني التخلص من كل هذا تخصيص الكائن؟ أي مساعدة سوف تكون محل تقدير كبير. شكرًا لك.

-oscar.

تحديث:

لقد أدركت أن التأخر يحدث إلا بمجرد النقر فوق: TextField على MfmailcompideViewController ونوع شيء ما، بمجرد كتابة شيء ما، سيكون هناك تسرب ذاكرة وسيتم تشغيل التطبيق بطيئا. هذا الشيء نفسه بالضبط يحدث أيضا في ملحن بريد أبل. أنا أستخدم محاكاة ربما هذا هو السبب؟ هل أي شخص آخر لديه تجربة simmilar؟

الطريقة التي أضغط عليها مراقبتي هي:

-(void)displayComposerSheet 
{
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    NSString *mailSubject = appDelegate.mailTitle;
    NSString *mailBody = appDelegate.mailLink;

    NSString *formattedString = [NSString stringWithFormat:@"<a href='%@'>%@</a>", mailBody, mailBody];

    [picker setSubject:mailSubject];

    // Set up recipients
    //NSArray *toRecipients = [NSArray arrayWithObject:@"somemail@hotmail.com"]; 
    //NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil]; 
    //NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"]; 

    //[picker setToRecipients:toRecipients];
    //[picker setCcRecipients:ccRecipients];    
    //[picker setBccRecipients:bccRecipients];

    // Attach an image to the email (Warning this causes a memory leak aknowledged by Apple)
    //NSString *path = [[NSBundle mainBundle] pathForResource:@"news_icon" ofType:@"png"];
    //NSData *myData = [NSData dataWithContentsOfFile:path];
    //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy"];

    // Fill out the email body text
    [picker setMessageBody:formattedString isHTML:YES];

    [self presentModalViewController:picker animated:YES];
    [picker release];
}

ويعززه هنا:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   
    ....
    [self dismissModalViewControllerAnimated:YES];
}
هل كانت مفيدة؟

المحلول

انها تسرب الذاكرة المعروفة في MFMailComposeViewController فئة (اعتبارا من IOS 4.2 SDK). يمكن أن ينظر إلى التسريبات في mailcomposer. مشروع عينة من Apple. حاول تشغيل التطبيق بأداة التخصيص وإشعار البايت الكلي الذي ينمو في كل مرة تنقر فوق "إلغاء" وإظهار الملحن مرة أخرى.

انظر أدناه لمناقشة مماثلة:

  1. http://discussions.apple.com/thread.jspa؟threadid=2158170.

  2. https:/devforums.apple.com/thread/23510؟tstart=15.

  3. https://devforums.apple.com/message/121093#121093.

نصائح أخرى

تأكد من استخدام

controller.mailComposeDelegate = self;

و لا

controller.delegate = self;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top