3

iOS アプリケーションに折りたたみ可能なテーブル ビューを実装しようとしています。これを行うために、セクション ヘッダーにジェスチャ レコグナイザーを設定して、NSNotification を親コントローラーに送信します。これにより、ビューが更新され、展開されたビューが表示されます。

親コントローラーがメッセージを受信するまで、すべてが機能します。これにより、次のエラーが発生します。

'+[MasterViewController receiveTestNotification:]: unrecognized selector sent to class 0xa92a8'

私はこのサイトを見回して、このエラーに関連するいくつかの投稿を見つけましたが、私が知る限り、私はそれらの間違いを犯していません.

私の登録はコントローラーの初期化で行われ、次のようになります。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"RefreshNavigation" object:nil];

呼び出したいレシーバー メソッドには、次のシグネチャがあります。

- (void) receiveTestNotification:(NSNotification *) notification

この通知を次のように送信します。これは、セクション ヘッダーとして使用している UIView のカスタム サブクラスにあります。

[[NSNotificationCenter defaultCenter] postNotificationName:@"RefreshNavigation" object:self];

私が見つけた例は、この正確な構成を示しています。コントローラーは、その後すぐにアプリ全体で使用されるため、割り当てが解除されていないことは確かです。

私が間違っていることについてのアイデアはありますか?

4

1 に答える 1

12

エラーメッセージは、通知がインスタンスMasterViewControllerではなくクラスに送信されていることを示していMasterViewControllerます。receiveTestNotification:はクラスメソッドではなくインスタンスメソッドであるため、エラーが発生します。

問題はinitialize、クラスメソッドであるメソッド内で通知を登録していることであると思います。そのためself、そのコンテキストでは、インスタンスではなくクラス自体を参照します。

これは非常によく似た前の質問initで、解決策は代わりにインスタンスメソッドであるメソッドに通知を登録することでした。

于 2012-09-12T21:24:15.077 に答える