2

私はプログラミングにかなり慣れていないため、事前に謝罪したいので、できる限り具体的でない場合は申し訳ありませんが、とにかくできる限り最善を尽くして問題を説明しようとします。必要なアプリを作成しています電子メールを送信できるようにするために、あらゆる場所を調べ、見つけたすべてのサンプル コードを試しましたが、コードを使用するたびに何も機能しないようで、次のエラーが表示されます。

2013-02-03 20:23:39.372 Tones[16409:c07] 警告: に提示しようとしています

そのビューはウィンドウ階層にありません!

これは、viewcontroller.hファイルで現在使用しているコードです。

UIViewController <MFMailComposeViewControllerDelegate>
- (IBAction)Mail:(id)sender;

これは私のviewcontroller.mファイルにあります:

- (IBAction)Mail:(id)sender {
if ([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];

    mail.mailComposeDelegate = self;

    [mail setSubject:@"Subject"];

    NSArray *recipient = [NSArray arrayWithObjects:@"mail@example.com", nil];
    [mail setToRecipients:recipient]; 

    NSString *body = @"body!";
    [mail setMessageBody:body isHTML:NO];

    [self presentModalViewController:mail animated:YES];
}
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[self dismissModalViewControllerAnimated:YES];
}

presentModalViewControllerまた、iOS 6 では selfと selfの両方が非推奨であるというメッセージが表示されますdismissModalViewControllerが、それは使用できないということですか、それとも何か間違ったことをしているのですか?

したがって、メール作成者で私が間違っていることについての助けをいただければ幸いです。

4

5 に答える 5

0
[self presentModalViewController:mail animated:YES];

で置き換えることができます

[self presentViewController:mail animated:YES completion:nil];

[self dismissModalViewControllerAnimated:YES]; 

[self dismissViewControllerAnimated:YES completion:nil];
于 2013-02-04T06:11:48.517 に答える
0

警告「警告: ウィンドウ階層にないビューで表示しようとしています!」ビューがInterface Builderまたはプログラムで接続されていないことを示唆しています。

非推奨の警告は、プロジェクト設定で使用する API を Xcode がチェックした結果として発生します。Xcode プロジェクトのビルド設定の IOS 展開ターゲットを iOS 6 に設定すると、Apple によって非推奨としてマークされたすべての API (presentModalViewController や DismissModalViewController など) にフラグが付けられます。

代わりに、presentViewController:animated:completion: と DismissViewControllerAnimated:completion: をそれぞれ使用してください。

于 2013-02-04T05:02:40.937 に答える
0

Sudhaが言ったように、[self presentViewController:mail animated:YES/NO completion:nil]; FromiOS6以降をpresentModalViewController使用dismissModalViewControllerし、非推奨です。それらは完了とともに使用されます。これはあなたの場合は nil になります。

于 2013-02-04T06:03:55.933 に答える
0

presentModalViewController:animated: を使用してモーダル ビュー コントローラーを表示できますが、現在は新しい presentViewController:animated:completion: を使用することをお勧めします。新しい on には完了ハンドラーがあり、コードをより細かく制御できます。新しい方法には iOS 5.0 以上が必要なので注意してください。ターゲットが iOS5.0 以上の場合は、新しい方法を使用する必要があります。また、dismissModalViewControllerAnimated: についても同様です。代わりに、dismissViewControllerAnimated:completion: を使用してください。

于 2013-02-04T04:59:34.067 に答える
0

こんにちは、MFMailComposerViewController クラスが存在するかどうかを確認できます。-(void)email{Class emailClass=(NSClassFromString(@"MFMailComposeViewController"));if emailClass!=nil)if ([emailClass canSendMail]{[self displayComposePage]; }

于 2013-02-04T12:53:08.430 に答える