如何判断对象是否附加了键值观察者?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

如果你告诉一个客观的c对象去除观察者:对于一个关键路径而且这个关键路径还没有被注册,它会破坏这些sads。喜欢 -

'无法删除关键路径的观察者“theKeyPath”,因为它没有注册为观察者。

有没有办法确定一个对象是否有注册的观察者,所以我可以做到这一点

if (object has observer){
  remove observer
}
else{
  go on my merry way
}
提问于
用户回答回答于

在远程观察者调用周围放置一个尝试捕获

@try{
   [someObject removeObserver:someObserver forKeyPath:somePath];
}@catch(id anException){
   //do nothing, obviously it wasn't attached because an exception was thrown
}
用户回答回答于

真正的问题是为什么你不知道你是否在观察它。

如果你正在观察的对象的类中这样做,停止。无论观察如何,它都期望继续观察它。如果你在不知情的情况下切断了观察者的通知,那么预计事情会中断; 更具体地说,期望观察者的状态过时,因为它没有从先前观察到的对象接收更新。

如果你在观察对象的类中这样做,只需记住你正在观察的对象(或者,如果你只观察一个对象,是否观察它)。这是假设观察是动态的,在两个不相关的对象之间; 如果观察者拥有所观察到的,只需在创建或保留观察者之后添加观察者,并在释放观察者之前移除观察者。

添加和删​​除一个对象作为观察者通常应该发生在观察者的类中,并且永远不会出现在观察对象的类中。

扫码关注云+社区