加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中实际上并未调用…
有人可以有任何建议吗?感谢:D

解决方法

我想知道为什么当你的指针被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应该完成的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读