Iam, представляющий MFMailComposeViewController
из моего пользовательского класса (не viewController). В iOS5 он работает нормально, но в iOS6 он сразу же после сбоя выходит из строя. Я нашел проблему метод dealloc получает вызов после представления представления, поэтому self освобождается. Из-за этого mailcomposer не может вызвать метод делегата на себе, поэтому он сбой. Я не получил решение для этого. Am с использованием ARC. Как предотвратить self
от освобождения до вызова метода делегата?Ошибка MFMailComposeViewController в iOS6 ARC
-(void)shareOnViewController:(UIViewController *)viewController completion:(ShareCompletionHandler)completion
{
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;
mailer.modalPresentationStyle = UIModalPresentationPageSheet;
[mailer setSubject:[self.userInfo objectForKey:@"title"]];
NSData *imageData = UIImagePNGRepresentation([self.userInfo objectForKey:@"image"]);
if (imageData) {
[mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"AttachedImage"];
}
NSURL *emailBody = [self.userInfo objectForKey:@"url"];
if (![emailBody isEqual:@""]) {
[mailer setMessageBody:[emailBody absoluteString] isHTML:NO];
}
[viewController presentModalViewController:mailer animated:YES];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unable to send mail"
message:@"Device is not configured to send mail"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
self.completionHandler = completion;
}
, пожалуйста, убедитесь, что какой-либо другой класс сохраняет ваш 'self' (или пользовательский класс) до тех пор, пока' MFMailComposeViewController' не будет правильно уволен. кто владеет вашим 'self' (или обычным классом)? – holex
@ Возможно, вы нашли решение? Тот же вопрос здесь ... –
@ElisabettaFalivene Inorder, чтобы предотвратить делегирование объекта делегата, кто-то должен его сильно удерживать. Я создал свойство на контроллере, который, вероятно, будет жить всегда, чтобы удерживать объект-делегат. Чтобы быть ясным, если Assume 'A'is controller' B' - это представление, которое представляет «Композитор почты» и делегирует его. Я держу ссылку 'B' в контроллере' A' –