2

ユーティリティアプリを持っています。このチュートリアルのように、フィードバックビューを呼び出してメールを送信する裏側にこのコードを実装しました。これは機能しますが、[フィードバックの送信] UIButtonをクリックすると、アプリがすぐにクラッシュします。*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController sendMail]: unrecognized selector sent to instance 0x89c1960'.

私はこれらのことをチェックしました:

デリゲートを適切に宣言し、MailComposerに実装しました。

私のメソッドsendMailは、ボタンのTouchUpイベントに接続されています。

私のメソッド名は同意します:

- (IBAction)sendMail;

- (IBAction)sendMail 
{
if ([MFMailComposeViewController canSendMail]) 
{
    MFMailComposeViewController *mfViewController = [[MFMailComposeViewController alloc] init];
    mfViewController.mailComposeDelegate = self;

    [self presentModalViewController:mfViewController animated:YES];

}
else 
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Status:" message:@"Your phone is not currently configured to send mail." delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];

    [alert show];
}

}

メソッド実装の先頭にブレークポイントが設定されているが呼び出されないため、コードはこのメソッドにイベントで到達しません。また、ViewDidLoadのブレークポイントがアクティブ化されませんでした。

このエラーを詳しく見てみましょう。

reason: '-[UIViewController sendMail]: unrecognized selector sent to instance 

メソッドではなく、sendMailという名前のビューコントローラーを期待しているようです。非常によく似ているように見えるこの投稿を読みましたが、xibIdentityドロップダウンリストに他のビューコントローラー名が表示されません。これは私の問題の一部だと思いますが、修正方法がわかりません。

たぶん私はビューコントローラーを介してMFMailComposerを提示することになっていますか?もしそうなら、私はそれを行う方法がわかりません。

任意の提案をいただければ幸いです。

4

1 に答える 1

3

UIViewControllerタイプをカスタムビューコントローラに誤って割り当てました。カスタムビューコントローラ(メソッドの実装を保持するもの)に実際に適用されるクラスタイプを選択する必要がありますsendMail

コード/セットアップの問題は、カスタムビューコントローラーがタイプでインスタンス化されることUIViewControllerです。ただし、UIViewControllerはと呼ばれるメソッドを実装していないsendMailため、例外が発生します。

カスタムViewControllerのクラス名を指定していないので、この回答のためにクラス名を想定します。MyCustomViewController

これらを設定するためにInterfaceBuilderを使用しているように見えるので、それを使用してビューコントローラのタイプをに変更しますMyCustomViewController

ここに画像の説明を入力してください

編集

コメントから、実際にコードを使用してViewControllerをインスタンス化していることがわかります。その場合は、次のように置き換えてください。

MyCustomViewController *controller = [[MyCustomViewController alloc] initWithNibName:@"ExMobSendFeedback" bundle:nil]; 
controller.title = @"Feedback"; 
[self.navigationController pushViewController:controller animated:YES];
[controller release];
于 2011-12-06T12:19:42.617 に答える