首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何判断对象是否附加了键值观察器

如何判断对象是否附加了键值观察器
EN

Stack Overflow用户
提问于 2009-10-17 15:00:13
回答 8查看 58.8K关注 0票数 142

如果您将一个对象C对象告诉removeObservers: for一个键路径,而该键路径还没有注册,它就会破解sads。就像-

‘无法从删除密钥路径’theKeyPath‘的观察者,因为它未注册为观察者。’

有没有一种方法可以确定一个对象是否有注册的观察者,这样我就可以这样做了?

代码语言:javascript
复制
if (object has observer){
  remove observer
}
else{
  go on my merry way
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-07-16 08:57:38

在您的removeObserver调用周围放置一个try catch

代码语言:javascript
复制
@try{
   [someObject removeObserver:someObserver forKeyPath:somePath];
}@catch(id anException){
   //do nothing, obviously it wasn't attached because an exception was thrown
}
票数 316
EN

Stack Overflow用户

发布于 2009-10-17 16:28:55

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

如果您是在被观察对象的类中执行此操作,请停止。无论是什么在观察,它都希望继续观察它。如果您在观察者不知情的情况下切断了观察者的通知,那么预计事情会崩溃;更具体地说,期望观察者的状态变得陈旧,因为它不会从以前观察到的对象接收更新。

如果您是在观察对象的类中执行此操作,则只需记住您正在观察哪些对象(或者,如果您只观察过一个对象,请记住您是否正在观察它)。这是假设观察值是动态的,并且在两个不相关的对象之间;如果观察者拥有观察者,只需在创建或保留观察者之后添加观察者,并在释放观察者之前删除观察者。

添加和删除作为观察者的对象通常应该发生在观察者的类中,而不应该发生在被观察对象的类中。

票数 37
EN

Stack Overflow用户

发布于 2012-02-17 11:08:28

如果someObject没有任何观察者,那么[someObject observationInfo]似乎是nil。然而,我不会相信这种行为,因为我还没有看到它的文档。另外,我不知道如何阅读observationInfo来获得特定的观察者。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1582383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档