2011-12-06 5 views
1

からインスタンスエラーに送られます。私はflipsideにこのコードを実装しました。このコードはフィードバックビューを呼び出して、tutorialのような電子メールを送信します。これは動作しますが、私は送信フィードバックUIButtonをクリックしたときに、私のアプリはすぐに*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController sendMail]: unrecognized selector sent to instance 0x89c1960'.認識されないセレクターはIユーティリティアプリケーションを持っているユーティリティアプリケーションナビゲーションコントローラビュー

でクラッシュし、私はこれらの事をチェックしました:

私は適切にデリゲートを宣言したと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という名前のビューコントローラではなく、メソッドを期待しているようです。私はこれと同じように見えるpostを読んでいますが、xib Identityドロップダウンリストの他のView Controller名は表示されません。私はこれが私の問題の一部だと思うが、私はそれをどのように修正するか分からない。

は、たぶん私はViewControllerを経由してMFMailComposerを提示することになっていますか?もしそうなら、私はそれをどうやって行うのか分からない。

何か提案がありがとうございます。

答えて

3

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

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

カスタム・ビュー・コントローラのクラス名を指定していないとして、私は単にこの回答のための日本酒のための1つを仮定します。 MyCustomViewController

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

enter image description here

EDIT

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

MyCustomViewController *controller = [[MyCustomViewController alloc] initWithNibName:@"ExMobSendFeedback" bundle:nil]; 
controller.title = @"Feedback"; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 
+0

はい、私はすべてを設定するためにIBを使用しています。ビューを強調表示しているときに、[アイデンティティ]タブのカスタムクラスクラスのリストにビューコントローラ名(XMSendMail)が表示されません。そこにリストされているviewcontrollerを取得するために何か他のものがありますか?ところで、新しいファイルを追加してXMSendMailビューコントローラを作成しました。ありがとう – Jazzmine

+0

カスタムクラスの下のClassという名前のフィールドに入力してください。 – Till

+0

それはうまくいかず、ビープ音が鳴り、名前を受け入れませんでした。 viewcontrollerは、これを介してプログラムによって作成されます:UIViewController * controller = [[UIViewController alloc] initWithNibName:@ "ExMobSendFeedback" bundle:nil];だから多分それがクラスリストに表示されない理由です。ただし、ファイル(.h、.m、.xib)は現在存在します。ところで、このことについて私と一緒に働いてくれてありがとう。 controller.title = @ "フィードバック"; [self.navigationController pushViewController:コントローラアニメーション:はい]; – Jazzmine

関連する問題