IOS5: Как вызвать электронную почту из класса NSObject - PullRequest
1 голос
/ 18 марта 2012

У моего приложения есть общий класс, который отображает actionSheet при каждом нажатии «Связаться с нами» на любом из множества NIB.

Если пользователь выберет «Отправить нам по электронной почте» из всплывающего окна actionSheet, я бынравится вызывать методы электронной почты из того же общего класса.После исследования я реализовал это:

-(void)SendEmail {

rootViewController = (UIViewController*)
[(AppDelegate*)[[UIApplication sharedApplication] delegate] viewController];

// compose
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = rootViewController;


//format message
NSArray *recipientsArray = [[NSArray alloc] initWithObjects:@"support@somename.com", nil];
[controller setToRecipients:recipientsArray];
[controller setSubject:[NSString stringWithFormat:@"A question about %@",string]];
[controller setMessageBody:outputMutString isHTML:YES];

//send
if (controller) [rootViewController presentModalViewController:controller animated:YES];

 }

// didFinishWithResult

 - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;{

if (result == MFMailComposeResultSent) {
}
[rootViewController dismissModalViewControllerAnimated:YES];
 }

Это запустит новое электронное письмо, однако:

  1. DidFinishWithResultне работает, так как модальное представление не удаляется ни после отправки электронного письма, ни после нажатия кнопки «Отмена»

  2. Я получаю это предупреждение: присваивание «id» из несовместимого типа «UIViewController *»__strong 'controller.mailComposeDelegate = rootViewController;

Помощь приветствуется.

1 Ответ

2 голосов
/ 18 марта 2012

Вам необходимо установить rootViewController в качестве принимающего делегата MFMailComposeViewControllerDelegate.

т.е. в файле RootViewController.h добавьте эту часть в объявление интерфейса, чтобы она выглядела примерно так:

@interface RootViewController : UIViewController <MFMailComposeViewControllerDelegate>
...