나는 내 사용자 지정 클래스 (viewController가 아님)에서 MFMailComposeViewController
을 표시합니다. iOS5에서는 잘 작동하지만 iOS6에서는 작성 시트를 발표 한 직후 충돌이 발생합니다. 문제가 발견되었습니다. dealloc 메소드가 뷰를 제시 한 후 호출되므로, 자체는을 할당 해제합니다. 이 메일 컴 포머로 인해 자체에 대한 대리자 메서드를 호출 할 수 없으므로 충돌이 발생합니다. 나는 그것을위한 해결책을 얻지 않았다. 사용중인 고객 : 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;
}
'MFMailComposeViewController'가 제대로 해제 될 때까지 다른 클래스가 '자체'(또는 사용자 정의 클래스)를 유지하는지 확인하십시오. 누가 당신의 '자기'(또는 커스텀 클래스)를 소유하고 있습니까? – holex
@Anil 어쩌면 해결책을 찾았습니까? 같은 문제가 여기에 ... –
@ElisabettaFalivene Delegate 객체가 누군가를 할당 해제하는 것을 방지하기 위해 Inorder는 그것을 강력하게 보유해야합니다. 대리자 객체를 항상 보유 할 수있는 컨트롤러에 속성을 만들었습니다. 'A'가 컨트롤러'B'라고 가정하면 'Mail composer'를 제시하고 위임하는보기입니다. 컨트롤러'A'에서'B'의 참조를 유지했습니다. –