Tôi tìm cách tạo một "Lớp người gửi Email tiện ích" mà tôi có thể sử dụng trong một số dự án iPhone.MFMailComposeViewController trong một lớp riêng biệt
Tôi đã tạo tiêu đề và triển khai MailSender cho mục đích đó.
MailSender.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
tôi gọi là lớp từ một View Controller (trong một nút chạm xuống hành động) sử dụng các hướng dẫn sau đây:
@implementation InfoViewController
MailSender *sender;
- (IBAction)openMail:(id)sender
{
sender = [[MailSender alloc] initWithParent:self];
[sender invokeMailSender:@"[email protected]" :@"123" :@"123" :@"123" :@"123"];
}
....
@end
Khi tôi chạy mã, tôi có thể hiển thị các chế độ xem email chính xác. Tuy nhiên, điều này sau đó được theo sau bởi một vụ tai nạn. Lưu ý rằng tôi không gặp sự cố khi sử dụng MFMailComposeViewController trực tiếp từ UIViewController của tôi (Và chỉ định Trình điều khiển Chế độ xem làm đại biểu),
Bất kỳ ý tưởng nào? Xin lỗi tôi vẫn còn mới đối với Mục tiêu C :)
tôi không thấy bất kỳ sự cố nào trong mã này ... nên hoạt động tốt !!! chỉ cần thử xây dựng sạch/khởi động lại xcode. Tôi nghĩ nó đang rơi từ nơi khác. –
Nếu tôi xóa: mailer.mailComposeDelegate = self; nó không sụp đổ nữa! Bất cứ điều gì sai với đại biểu của tôi? – SiN
Vào thời gian nào nó gặp sự cố? Có phải khi phương thức ủy nhiệm 'didFinishWithResult' được gọi bởi bất kỳ cơ hội nào không? Ngoài ra, bạn có thể đăng mã của bộ điều khiển xem mà gọi phương thức 'initWithParent'method không? – Mutix