iphone – iOS:MFMailComposeViewController无法处理模型
发布时间:2020-12-14 17:11:47 所属栏目:百科 来源:网络整理
导读:遇到MFMessageComposeViewController问题. 情况是这样的: 我正在创建一个模型,它将实现MFMessageComposeViewController而不是直接在ViewController中执行它.现在,当我实现presentModalViewController ::方法时,它工作正常(出现mail.app接口)但是当我单击mai
遇到MFMessageComposeViewController问题.
情况是这样的: 我正在创建一个模型,它将实现MFMessageComposeViewController而不是直接在ViewController中执行它.现在,当我实现presentModalViewController ::方法时,它工作正常(出现mail.app接口)但是当我单击mail.app界面中的取消/发送按钮时,它不会忽略mail.app .. 它像这样的东西: MSGViewController的一个方法片段,它实现了发送邮件模型: - (IBAction)openEmail:(id)sender { Messaging *mail = [[Messaging alloc]initWithModal:self]; [mail emailInvitation:@"Eventz Date" eventAt:@"Eventz Location" withImage:nil]; [self.sendingStatus setText:mail.sendingStatus]; } 我实现消息传递的模型: Messaging.h #import <Foundation/Foundation.h> #import <MessageUI/MessageUI.h> @interface Messaging : NSObject <MFMailComposeViewControllerDelegate,MFMessageComposeViewControllerDelegate> @property (nonatomic,copy) NSString *sendingStatus; @property (nonatomic,retain) id modal; - (id)initWithModal:(id)modal; - (void)emailInvitation:(NSString *)eventDate eventAt:(NSString *)eventLocation withImage:(UIImage *)imageAttachment; @end Messaging.m #import "Messaging.h" @implementation Messaging @synthesize sendingStatus = _sendingStatus; @synthesize modal = _modal; - (id)initWithModal:(id)modal{ self = [super init]; self.modal = modal; return self; } - (void)emailInvitation:(NSString *)eventDate eventAt:(NSString *)eventLocation withImage:(UIImage *)imageAttachment{ MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; if ([MFMailComposeViewController canSendMail]){ mailer.mailComposeDelegate = self; [mailer setSubject:@"Event Invitation"]; [mailer setMessageBody:@"message body"] isHTML:NO]; if(imageAttachment != nil){ NSData *imageData = UIImagePNGRepresentation(imageAttachment); [mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"imageFileName"]; } [self.modal presentModalViewController:mailer animated:YES]; return; } [self deviceDoNotSupportMessaging]; } - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { NSLog(@"called"); switch (result) { case MFMailComposeResultCancelled: self.sendingStatus = @"Mail sending cancelled."; break; case MFMailComposeResultSaved: self.sendingStatus = @"Mail saved."; break; case MFMailComposeResultSent: self.sendingStatus = @"Mail sent."; break; case MFMailComposeResultFailed: self.sendingStatus = @"Mail sending failed."; break; default: self.sendingStatus = @"Mail not sent."; break; } [controller dismissModalViewControllerAnimated:YES]; } BTW,NSLog(@“叫”);在.m中实际上并未调用… 解决方法
我想知道为什么当你的指针被dealloc’d时你没有得到错误.我使用你的代码并在实例化Message类时立即得到了这个错误:
Messaging *mail = [[Messaging alloc]initWithModal:self]; 所以我改变了一件事,我在我的通话类中发送了一个Strong Property: @property (strong,nonatomic) Messaging *mail; 然后这样称呼它: mail = [[Messaging alloc]initWithModal:self]; [mail emailInvitation:@"Eventz Date" eventAt:@"Eventz Location" withImage:nil]; NSLog(@"Called the emailInvitation"); 调用了日志语句,我甚至确保MailComposer得到了正确的响应: - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { NSLog(@"called"); switch (result) { case MFMailComposeResultCancelled: self.sendingStatus = @"Mail sending cancelled."; NSLog(@"Mail Cancelled"); break; case MFMailComposeResultSaved: self.sendingStatus = @"Mail saved."; NSLog(@"Mail Saved"); break; case MFMailComposeResultSent: self.sendingStatus = @"Mail sent."; NSLog(@"Mail Sent"); break; case MFMailComposeResultFailed: self.sendingStatus = @"Mail sending failed."; NSLog(@"Mail Failed"); break; default: self.sendingStatus = @"Mail not sent."; NSLog(@"Mail Not Sent"); break; } [controller dismissModalViewControllerAnimated:YES]; } 它确实如此. 顺便说一句 – 我喜欢你这样做的方式.这是OOP应该完成的方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |