Ara*_*and 141 cocoa key objective-c key-value-observing
如果你告诉一个目标c对象removeObservers:对于一个关键路径并且该关键路径尚未注册,它会破坏sads.喜欢 -
'无法删除关键路径"theKeyPath"的观察者,因为它未注册为观察者.
有没有办法确定一个对象是否有一个注册的观察者,所以我可以做到这一点
if (object has observer){
remove observer
}
else{
go on my merry way
}
Run Code Online (Sandbox Code Playgroud)
小智 312
试试看你的removeObserver调用吧
@try{
[someObject removeObserver:someObserver forKeyPath:somePath];
}@catch(id anException){
//do nothing, obviously it wasn't attached because an exception was thrown
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*sey 37
真正的问题是为什么你不知道你是否在观察它.
如果您在被观察对象的类中执行此操作,请停止.无论观察什么,它都希望继续观察它.如果你在不知情的情况下切断了观察者的通知,那么期待事情就会破裂; 更具体地说,期望观察者的状态变得陈旧,因为它没有从先前观察到的对象接收更新.
如果你在观察对象的类中这样做,只需记住你正在观察的对象(或者,如果你只观察过一个对象,你是否正在观察它).这假设观察是动态的,并且在两个不相关的对象之间; 如果观察者拥有观察者,只需在创建或保留观察者后添加观察者,并在释放观察者之前移除观察者.
作为观察者添加和删除对象通常应该发生在观察者的类中,而不是在观察对象中.
ma1*_*w28 25
FWIW,[someObject observationInfo]似乎nil如果someObject没有任何观察员.但是,我不相信这种行为,因为我没有看到它记录在案.另外,我不知道如何阅读observationInfo以获得特定的观察者.
| 归档时间: |
|
| 查看次数: |
55774 次 |
| 最近记录: |