クラスがカスタムクラスの場合、通知を投稿した後、オブザーバーに対応するセレクターが2回呼び出されます。セレクターが1回だけ呼び出されるようにするためのより良い解決策はありますか?
4 に答える
セレクターが2回呼び出された場合は、おそらく2回登録しています。
オブザーバークラスが名前で通知に登録されているが、特定のオブジェクトに対しては登録されていない場合、元のオブジェクトに関係なく、通知が発生するたびに呼び出されるため、複数のメッセージを受信します。
同様に、オブザーバーが特定のオブジェクトに対して登録されているが、名前付き通知に対しては登録されていない場合、そのオブジェクトに関する通知があるたびにメッセージが送信されます。
遠隔状態の変化を通知するための代替メカニズムは、キー値の監視です-http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
私のために働いたのはいくつかのことでした:
1-addObserver登録呼び出しが行われるクラスで、特定のオブジェクトを追加することでした。
2-同じタイプのオブジェクトとして、postNotification呼び出しが行われるクラス。
また、dispatchAsync呼び出しでもpostNotificaitonを実行しますが、それはあなたの問題とは関係ありません。
addObserverが1回だけ設定されているかどうかを確認します。私の場合、addObserverループが2回実行されたため、バグが発生しました。