2009-07-05 3 views
0

私は過去2日間、自分のアプリからメールを送信できるようにしようとしました。ここのスマートな人々の一人が私を助けることができます。 presentModalViewControllerは私のためには機能しません(なぜか理由を説明せずにアプリケーションがクラッシュする)ので、MFMailComposeViewControllerのビューを追加する必要があります。iphone - MFMailComposeViewController(アプリ内メール)の表示を追加

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
    controller.mailComposeDelegate = self; 
    [controller setSubject:@"test subject"]; 
    [controller setMessageBody:@"this is the message body" isHTML:NO]; 

    // [self presentModalViewController:controller animated:YES]; //this crashes the app 
//so I try this instead:   
    controller.view.frame = CGRectMake(0,0,480,320); 
    [self.view addSubview:controller.view]; 
    [controller release]; 

画面に追加されるのは、件名バーのみです(キャンセルと送信ボタンがあります)。テキストフィールド(To:、Cc :, Subject、本文)は表示されません。なぜそれらはMFMailComposeViewControllerのビューの一部ではないのですか?それらを表示するにはどうすればいいですか?

答えて

2

正直、presentModalViewControllerを使用してください。 SDKの周りを強制するのではなく、クラッシュをデバッグすることを検討してください。デバッガをオンにして、コンソールに例外が記録されているかどうかを確認します。クラッシュログなどを確認してください。

また、selfが適切なデリゲートであり、UIViewControllerサブクラスであることを確認してください。

+0

selfは確かにUIViewControllerのサブクラスであり、適切なデリゲートです。 @interface MenuViewController:UIViewController {... クラッシュ時に例外が記録されることはありません。だからこそ、私はここで完全に迷っている。私はちょうど黒い画面を取得します。コンソール以外のどこからでもクラッシュログを取得できますか? – sol

+0

オーガナイザをXCodeでチェックしてください。 – amattn

+0

〜/ Library/Logs/DiagnosticReports/ – amattn

1

代わりに試してみてください:

[[self navigationController] presentModalViewController...];

それはそれを提示する適切な方法ですので。手動でビューを追加しようとすると、残念ながらまったく間違っていて動作しません。

+0

私はナビゲーションコントローラを使用していませんよ。とにかくそのコードを試しました - それはクラッシュしませんが、何も起こりません。 – sol

+0

MFMailComposeViewControllerを使用するには、ナビゲーションコントローラを使用する必要があります。何もしない理由は、ナビゲーションコントローラを使用していない場合、[self navigationController]はnilを返し、Cocoaメッセージではnilはno-opです。 –

+0

ナビゲーションコントローラを使用する必要はありません。 Adam、あなたは 'presentModal'と 'pushViewController'を混同していますか? (後者はnavigationControllerが必要です) –

1

まあ私は1つのダミーのビューコントローラを作成しなければならないことを決定したそうくそ事はにスライドしません。

を私は@interface Sys_Mail : UIViewController <MFMailComposeViewControllerDelegate>

あるSys_Mailというクラスを作成し、私は基本的に作成ルートビュービューコントローラ。私はポートレート/ランドスケープと何時間も取り組んでいましたが、ビューコントローラをトップレベルビュー(私のランドスケープトランスフォームを含む)にアタッチすると、ランドスケープウィンドウとしてスライドします。新しいウィンドウが挿入されている間、親ウィンドウが数秒間移動します。これは、親に奇妙なことをする横長変換の副作用です。

あなたが自動回転メッセージを処理し、あなたのSys_Mailクラスのメソッドを宣言しなければなりませんスライディングウィンドウの上に横向きを取得:

//======================= 
// shouldAutorotateToInterfaceOrientation 
//======================= 
// see if this ever gets called for the view controller 
-(BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation 
{ 
    if (TRACE) printf ("shouldAutorotateToInterfaceOrientation\n"); 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); // or whatever orientation is needed 
} 

変数gMasterViewは私のトップレベルのビューを参照する(つまり、ランドスケープ変換持ち、窓に取り付けられています。 )。サブビューは機能していないように見えますが、コントローラの表示がひどいです。私はいくつかのマイクロソフトMFCのタイプcrudではない私のビューの完全なコントロールをしたい!

Sys_Mail* g_root_vc; 

if (g_root_vc == nil) { 
    // create an empty view controller so we have something to work with 
    g_root_vc = [[Sys_Mail alloc] init]; 
    g_root_vc.view = (UIView*) gMasterView; 
} 

ので、この

0

は、私は同じクラッシュを持っているし、最終的に私が[自己navigationController]にpresentModalViewControllerメッセージを送ることによって、それを修正することができます。私はこれが役立つことを願って

// Create the Mail composer view controller 
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; 

// Set the view controller delegate 
controller.mailComposeDelegate = self; 

// Set recipients, if you want 
[controller setToRecipients:recipients]; 

// Set subject, if you want 
[controller setSubject:@"The subject"]; 

// Set message body, if you want 
[controller setMessageBody:@"The message body" isHTML:YES]; // isHTML -> YES/NO depending the message body 

// Present the view controller 
[[self navigationController] presentModalViewController:controller animated:YES]; 

// Memory management 
[controller release]; 

は、ここに私のコードです!私は「この問題を解決しまし

+0

私も同じ問題に直面している、コントローラはゼロになる、 "0x0"それはクラッシュするように。なぜそれがゼロになり、0x0アドレスを格納しているのかわかりません。 –

2

はこのないようにしよう:

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; 

しかし、この:

MFMailComposeViewController *mailComposeViewController = [MFMailComposeViewController new]; 
関連する問題