Ich möchte eine "Dienstprogramm E-Mail-Absender-Klasse" erstellen, die ich in mehreren iPhone-Projekten verwenden kann.MFMailComposeViewController in einer separaten Klasse
Ich habe MailSender Header und Implementierung für diesen Zweck erstellt.
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
ich die Klasse von einem View-Controller genannt (in einer Schaltfläche Aktion aufzusetzen) mithilfe der folgenden Anweisungen:
@implementation InfoViewController
MailSender *sender;
- (IBAction)openMail:(id)sender
{
sender = [[MailSender alloc] initWithParent:self];
[sender invokeMailSender:@"[email protected]" :@"123" :@"123" :@"123" :@"123"];
}
....
@end
Wenn ich den Code ausführen, kann ich die E-Mail-Ansichten korrekt anzeigen. Dann folgt jedoch ein Absturz. Beachten Sie, dass ich keinen Absturz habe, wenn MFMailComposeViewController direkt von meinem UIViewController verwendet wird (und den View Controller als Delegierten zuweist),
Irgendwelche Ideen? Entschuldigung, ich bin immer noch ein neues Ziel C :)
ich sehe kein Problem in diesem Code ... sollte gut funktionieren !!! Versuchen Sie einfach, xcode zu erstellen/neu zu starten. Ich denke, es stürzt von woanders ab. –
Wenn ich entferne: mailer.mailComposeDelegate = self; es stürzt nicht mehr ab! Irgendetwas stimmt nicht mit meinem Delegierten? – SiN
Zu welcher Zeit stürzt es ab? Ist es, wenn die Delegiertenmethode 'didFinishWithResult' zufällig aufgerufen wird? Könnten Sie auch den Code Ihres View Controllers posten, der die 'initWithParent' Methode aufruft? – Mutix