0

私は次のようにaddObserverを使用しています:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(notificationReceived:) name:nil object: nil];

すべてがうまく機能しますが、オブザーバーが不要になったら削除するのが良い形かもしれないと思いました...次の行を使用する必要があることがわかりました。

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"observerName" object:nil];

問題は、addObserver 行を変更して名前を含め、removeObserver が削除するオブザーバーを認識できるようにすると、通知が呼び出されなくなることです。この行は実行されますが、名前が追加されると無視されます。

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

名前を nil に戻すと、再び機能します。ここで私が間違っていることを知っている人はいますか?

ありがとう!

4

1 に答える 1

4

パラメータの意味を誤解している可能性があると思います。

name:、通知が必要な通知をシステムに伝えます。

selfは実際のオブザーバーであるため、通知の受信removeOberserver:selfを停止するとします。

どちらがどの意味を持っているかについて、ドキュメントをもう一度注意深く読む必要があります。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html#//apple_ref/doc/uid/20000219-SW1

例については、Objective-C で NSNotificationCenter を介してイベントを送受信するクラスを作成する方法を参照してください。

于 2013-03-19T15:52:50.920 に答える