web-dev-qa-db-ja.com

iOS、認識されないセレクターがインスタンスに送信されましたか?

インポートされたカスタムactionBarを含むメイン画面が表示されました。このactionBarは、.mファイルと.hファイルを含む別の.xibファイルに作成しました。

ActionBar.mのviewDidLoadbackgroundColorなどのグラフィック設定を行います。

また、このactionBarにボタンがあり、通常のボタンのリンク方法をIBActionでリンクしました。

次のように、actionBarをメイン画面にロードします。

ActionBarWithLogoff *actionBar = [[ActionBarWithLogoff alloc] initWithNibName:@"ActionBarWithLogoff" bundle:nil];
[topBar addSubview:actionBar.view];
[actionBar release];

私のactionBar.h:

- (IBAction)ActionBarLogoff:(id)sender;

私のactionBars.mのメソッド:

-(void) ActionBarLogoff:(UIButton *)sender
{
NSLog(@"!!!!!!!!!!ActionBarLogoff");
}

これは私のエラーでした。ボタンをクリックすると、次のエラーが発生します。

2014-01-27 13:52:21.856 GB_Mobil_DK [2954:60b]-[__ NSArrayM ActionBarLogoff:]:認識されないセレクターがインスタンス0x1656d880に送信されました2014-01-27 13:52:21.858 GB_Mobil_DK [2954:60b]*キャッチされなかった例外 'NSInvalidArgumentException'が原因でアプリを終了しています、理由: '-[__ NSArrayM ActionBarLogoff:]:認識されないセレクターがインスタンス0x1656d880に送信されました' *最初のスロー呼び出しスタック:(0x2f94be83 0x39ca86c7 0x2f94f7b7 0x2f94e0af 0x 0x320f0743 0x3210475b 0x32104425 0x320ff451 0x320d4d79 0x320d3569 0x2f916f1f 0x2f9163e7 0x2f914bd7 0x2f87f471 0x2f87f253 0x345b92eb 0x32134845 0x97985 0x3a1a1ab

理由を教えてくれる人はいますか?そして最も重要なことに、私がこの問題を解決するのを助けることができます^^?

6
user2408952

actionBarインスタンスを解放し、そのviewを保持しているだけです。 actionBarインスタンスがボタンアクションへのレスポンダーである場合、ボタンクリックメッセージは削除されたインスタンスに送信されます。 actionBarインスタンスを保持する必要があります。これを行う1つの方法は、ivarまたはretainプロパティにすることです。

また、カスタムビュー用にUIViewControllerを作成しているように見えます。代わりに、XIBを使用してカスタムUIViewだけを作成できます。

編集

保持プロパティを宣言し、

@property (nonatomic, retain) ActionBarWithLogoff *actionBar;

OR

単にivarとして宣言し、

@interface YourViewController: UIViewController {
    ActionBarWithLogoff *actionBar;
}

そして、deallocメソッドでは、

-(void) dealloc {
    //...

    [actionBar release];

    //...
}

お役に立てば幸いです。

8
Amar