gpt4 book ai didi

iphone - MFMailComposeViewController 在一个单独的类中

转载 作者:可可西里 更新时间:2023-11-01 04:31:30 25 4
gpt4 key购买 nike

我试图创建一个可以在多个 iPhone 项目中使用的“实用电子邮件发件人类”。

我为此目的创建了 MailSender header 和实现。

邮件发送器.h:

@interface MailSender : NSObject<MFMailComposeViewControllerDelegate>

- (id) initWithParent:(UIViewController*) mainController;

- (void) invokeMailSender:(NSString*) to:(NSString*) subject:(NSString*) failureTitle:(NSString*) failureMessage:(NSString*) failureCancel;

@end

MailSender.m:

#import "MailSender.h"

@implementation MailSender

MFMailComposeViewController* mailer;
UIViewController* mailParentController;

- (id) initWithParent:(UIViewController*) mainController
{
if( self = [super init])
{
mailParentController = mainController;
}
return self;
}

- (void) invokeMailSender:(NSString*) to:(NSString*) subject:(NSString*) failureTitle:(NSString*) failureMessage:(NSString*) failureCancel;

{
if([MFMailComposeViewController canSendMail])
{
mailer = [[MFMailComposeViewController alloc] init];

mailer.mailComposeDelegate = self;

[mailer setSubject:subject];

NSArray *toRecipients = [NSArray arrayWithObjects:to, nil];

[mailer setToRecipients:toRecipients];
[mailParentController presentModalViewController:mailer animated:YES];
}
else
{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:failureTitle message:failureMessage
delegate:nil cancelButtonTitle:failureCancel otherButtonTitles: nil];

[alert show];
}
}

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
// Do nothing
[mailParentController dismissModalViewControllerAnimated:YES];
mailer = nil;
}



@end

我使用以下指令从 View Controller 调用类(在按钮按下操作中):

@implementation InfoViewController

MailSender *sender;

- (IBAction)openMail:(id)sender
{
sender = [[MailSender alloc] initWithParent:self];
[sender invokeMailSender:@"test@test.com" :@"123" :@"123" :@"123" :@"123"];
}

....
@end

当我运行代码时,我能够正确显示电子邮件 View 。但是,随后发生崩溃。请注意,直接从我的 UIViewController 使用 MFMailComposeViewController 时我没有崩溃(并将 View Controller 指定为委托(delegate)),

有什么想法吗?对不起,我还是 Objective C 的新手 :)

最佳答案

您需要保留发件人 MailSender 实例。在您调用调用消息后,它正在被释放。

您可以通过声明一个名为senderproperty 来做到这一点。例如

@property (strong, nonatomic) MailSender *sender;
...
@synthesize sender = _sender;
...
self.sender = [[MailSender alloc] initWithParent:self];
[self.sender invokeMailSender:@"noor@dimachk.com" :@"123" :@"123" :@"123" :@"123"];

顺便说一句,你的方法声明有点滑稽。你应该命名参数。例如

- (void)invokeMailSender:(NSString *)sender 
to:(NSString *)to
subject:(NSString *)subject
failureTitle:(NSString *)failureTitle
failureMessage:(NSString *)failureMessage
failureCancelButtonTitle:(NSString *)failureCancelButtonTitle

关于iphone - MFMailComposeViewController 在一个单独的类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com