为什么NSNotification中的Observer调用了两次....?

时间:2009-08-25 15:22:20

标签: objective-c cocoa notifications

如果类是自定义类,则在发布通知后,对应于观察者的选择器将被调用两次。是否有更好的解决方案,以便只调用一次选择器?

4 个答案:

答案 0 :(得分:8)

如果选择器被调用两次,你可能已经注册了两次。

答案 1 :(得分:3)

如果观察者类按名称注册了通知,但没有针对特定对象注册,则它将收到多条消息,因为每次发生通知时都会调用它,而不管原始对象是什么。

同样,如果观察者针对特定对象进行了注册,但未针对命名通知进行注册,则每次有关于该对象的通知时都会向其发送消息。

另一种了解遥远状态变化的机制是关键价值观察 - http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

答案 2 :(得分:1)

对我有用的是几件事:

1 - 在进行addObserver注册调用的类中,是添加特定对象。

2 - 在进行postNotification调用的类中,作为相同类型的对象。

我也在dispatchAsync调用中执行postNotificaiton,但这与您的问题无关。

答案 3 :(得分:0)

检查addObserver是否只设置一次。就我而言,addObserver循环运行了两次,因此就是错误。