【问题标题】:Difference between mailComposeDelegate and simple Delegate propertymailComposeDelegate 和简单的 Delegate 属性之间的区别
【发布时间】:2012-11-21 10:35:15
【问题描述】:

嗨,我对 MFMailComposeViewController 委托属性感到困惑,当我在调用 [self presentModalViewController:mailer animated:YES]; 之后设置 mailer.mailComposeDelegate 应用程序崩溃并且当我设置 mailer.delegate 时,应用程序不会崩溃,但它的视图在之后无法隐藏发送邮件或只是从其导航按钮“取消”取消它。我被卡住了为什么会发生这种情况。 让我分享代码,你会得到提示我在哪里做错了。

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; 并评论此行[mailer release]; 在加载图像时仍然让我崩溃。 这是我在崩溃后得到的图像。

【问题讨论】:

  • 您的邮件正文实际上不是有效的 HTML - 将 NO 传递给 isHTML 参数,这可能会有所帮助
  • 我改变了这个但仍然崩溃:(.....

标签: iphone ios xcode ios5 mfmailcomposeviewcontroller


【解决方案1】:

在.h文件中添加MFMailComposeViewControllerDelegate

@interface VideoPlayAndSharing : UIViewController
<MFMailComposeViewControllerDelegate>  

显示 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:@"rajneesh071@gmail.com"];
        NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil];
        NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"];

        [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 视图没有隐藏的原因。

【讨论】:

  • 是的,正如我所说,我在将图像数据作为附件加载时崩溃了。
  • 嘿,你的图片数据有问题
  • 检查您的图像数据...或尝试使用 UIImage *image = [UIImage imageNamed:@"raj_iAmTheDeveloper.jpg"]; NSData *data = UIImagePNGRepresentation(图像); [mailer addAttachmentData:data mimeType:@"image/png" fileName:@"MyPersonalImage"];
  • 图片很好,因为我在 Facebook 上分享相同的图片,当我做 mailer.delegate=self;而不是 mailer.mailComposeDelegate = self;,它加载图像非常好。
  • 对,有什么问题?因为我有同样的问题,这里没有任何帮助..
【解决方案2】:

评论下一行 [邮件发布];

我认为这是导致问题的原因

【讨论】:

  • 评论了,但当我将图像作为附件加载到邮件中时仍然给我错误。
  • 做一件事。NSLog 图像数据。它来了?还可以尝试任何示例图像,而不是 screenImgSubCat 存在于您的应用程序包 NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"SampleImage.png"]);
  • 图片很好,因为我在 Facebook 上分享相同的图片,当我做 mailer.delegate=self;而不是 mailer.mailComposeDelegate = self;,它可以很好地加载图像。
【解决方案3】:

检查标题 - 委托属性的类型为id &lt;UINavigationControllerDelegate&gt; - 因为邮件作曲家继承自它,因此,由于作曲家的内部恶作剧,将其设置为某个东西可能是一个坏主意,以获取邮件作曲家状态集自我的通知作为作曲家的 mailComposeDelegate。

【讨论】:

  • 现在我设置了这个,但正如我告诉你的那样,它仍然让我崩溃。检查我更新的问题。
【解决方案4】:

首先在您的 .h 文件中添加 MFMailComposeViewControllerDelegate 委托,然后再次检查。还有 mailer.mailComposeDelegate = self;正确的方法不是 mailer.delegate=self 也在你的代码中改变它然后检查。

在 .m 中导入 MessageUI/MFMailComposeViewController.h ,带有小于号和大于号,并添加 MessageUI.framework。

NSArray *toRecipients = [NSArray arrayWithObject:@"vishal@ldh.01s.in"]; 
[mail setToRecipients:toRecipients];

在设置消息正文之前添加这两行,然后检查。

【讨论】:

  • 我改成mailer.mailComposeDelegate = self;并删除[邮件发布];但它仍然让我在加载时崩溃。让我与你分享图片,在更新下查看我的问题。
  • 不。这只是一个委托声明,没有任何区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 2011-06-22
  • 2012-08-27
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多