问题描述
您好我在 MFMailComposeViewController
委托属性上感到困惑,当我设置 mailer.mailComposeDelegate
应用程序刚刚调用后崩溃 [self presentModalViewController:mailer animated:YES];
当我执行 mailer.delegate
时,app不会崩溃但是发送邮件后,其视图无法隐藏,或者只是从导航蝙蝠按钮取消取消它。我被卡住了为什么会这样。
让我分享代码,你得到我在做错误的提示。
Hi i am getting confuse on MFMailComposeViewController
delegate property, when i set mailer.mailComposeDelegate
app crash just after call [self presentModalViewController:mailer animated:YES];
and when i do mailer.delegate
then app don't crash but its view can't hide after sending mail or just cancel it from its navigation bat button "Cancel". I am getting stuck why this happen.Let me share code, you get hint where i am doing mistake.
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
if(mailer)
{
mailer.mailComposeDelegate = self;
//mailer.delegate=self;
[mailer setSubject:@"What the Buck?"];
imageData = UIImagePNGRepresentation(screenImgSubCat);
[mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"testapp"];
NSString *emailBody = @"What the Buck?! – www.testapp.com";
[mailer setMessageBody:emailBody isHTML:NO];
[self presentModalViewController:mailer animated:YES];
//[mailer release];
}
}
}
更新
我更改了代码并使用 mailer.mailComposeDelegate = self;
并对此行发表评论 [邮件程序发布];
在加载图片时仍然让我崩溃。
这是我在崩溃后得到的图像。
I change code and use mailer.mailComposeDelegate = self;
and also comment this line [mailer release];
still giving me crash on when image is being loading.Here is the Image what i am getting after crash.
推荐答案
在.h文件中添加 MFMailComposeViewControllerDelegate
@interface VideoPlayAndSharing : UIViewController
<MFMailComposeViewControllerDelegate>
Display ComposerSheet
Display ComposerSheet
-(void)displayComposerSheet
{
if ((videodta.length/1024)/1024 < 25)
{
NSLog(@"Video size >> %d",videodta.length/1024);
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Your subject"];
// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:@"[email protected]"];
NSArray *ccRecipients = [NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil];
NSArray *bccRecipients = [NSArray arrayWithObject:@"[email protected]"];
[picker setToRecipients:toRecipients];
[picker setCcRecipients:ccRecipients];
[picker setBccRecipients:bccRecipients];
[picker addAttachmentData:videodta mimeType:@"video/mp4" fileName:@"MyPersonalMessage"];
// Fill out the email body text
NSString *emailBody = @"Type your message here";
[picker setMessageBody:emailBody isHTML:NO];
[self presentModalViewController:picker animated:YES];
}
else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My Personal Message"
message:@"Video exceed the limit of 25 MB"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}
}
和委托方法
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
// Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultCancelled:
message.text = @"Result: canceled";
break;
case MFMailComposeResultSaved:
message.text = @"Result: saved";
break;
case MFMailComposeResultSent:
message.text = @"Result: sent";
break;
case MFMailComposeResultFailed:
message.text = @"Result: failed";
break;
default:
message.text = @"Result: not sent";
break;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
编辑
picker.mailComposeDelegate
其代表 MFMailComposeViewControllerDelegate
它回复 - (void)mailComposeController
picker.delegate
其代表 UINavigationControllerDelegate
它对导航控制器的响应不是 - (void)mailComposeController
,等取消点击它不会调用,这就是为什么你的 MFMailComposeViewController
视图没有隐藏。
Its respond to navigation controller not - (void)mailComposeController
, so on cancel click it will not call, thats why your MFMailComposeViewController
view is not hiding.
这篇关于mailComposeDelegate和简单Delegate属性之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!