2012-03-18 7 views
1

My Appには、多くのNIBのいずれかから「お問い合わせ」をクリックするたびにactionSheetを表示する共通クラスがあります。IOS5:NSObjectクラスから電子メールを呼び出す方法

ユーザがactionSheetポップアップから "Email Us"を選択した場合、私は同じ共通クラスから電子メールメソッドを呼びたいと思います。私はこの実装調査した:これは、新しい電子メールを起動します

-(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:@"[email protected]", 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. 私はこの警告を受け取ります:互換性のないタイプ 'UIViewController * __ strong'から 'id'に割り当てます。 controller.mailComposeDelegate = rootViewController;

ヘルプありがとうございます。

答えて

2

rootViewControllerに代理人MFMailComposeViewControllerDelegateを設定する必要があります。あなたのRootViewController.hファイル内

すなわち、それはのようになりますように、インターフェイス宣言にその部分を追加します。

@interface RootViewController : UIViewController <MFMailComposeViewControllerDelegate> 
+0

こんにちはInafziger。私は別の "RootViewController"クラスを作成していません。私は共通のクラスにオブジェクト "UIViewController * rootViewController"を作成しました。私が持っているものを使う方法があるのですか、別のクラスを使う唯一の解決策です(複雑すぎるようです)。 – Jeremy

+0

おっと、私はそれを見ませんでした。このコードがある共通クラスでも同じことができます。コントローラを変更するだけです。 mailComposeを自己に削除します。 – lnafziger

+0

これはあなたのために機能しましたか? – lnafziger

関連する問題