【发布时间】:2013-06-12 04:43:12
【问题描述】:
我正在从我的自定义类(不是 viewController)中呈现 MFMailComposeViewController。在 iOS5 中它工作正常,但在 iOS6 中它在呈现撰写表后立即崩溃。我发现了问题dealloc 方法在呈现视图后被调用,因此 self 正在释放。由于这个 mailcomposer 不能调用 self 的委托方法,所以它崩溃了。我没有得到解决方案。我正在使用 ARC。 如何防止 self 在委托方法被调用之前解除分配?
-(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(或自定义类)? -
@Anil 也许你找到了解决方案?同样的问题...
-
@ElisabettaFalivene 为了防止委托对象解除分配,必须牢牢抓住它。我在控制器上创建了一个属性,该属性很可能始终存在以保存委托对象。要明确假设
Ais 控制器B是呈现Mail composer并委托给 .我在控制器A中保留了B的引用
标签: ios objective-c mfmailcomposeviewcontroller