当我在观察员中删除自己时,我的CALayer子类崩溃了 - (void)dealloc:
- (void)dealloc {
[[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"showColorLabels"];
[colorLabel release];
[_color release];
[super dealloc];
}
抛出异常。它说自我没有被添加为观察者。这只发生在某种情况下,在调用[CATransaction flush]之后。
我使用Instruments来查看对象的分配时间。它说它是通过调用CALayerGetPresentationLayer()分配的。我不确定这是如何工作的,但我想这是我原始图层的副本,因此从未调用过init,我从未被添加为观察者。
如何在删除自己之前检查我是观察者,还是告诉我是否是表示层?
Bridger Maxwell
答案 0 :(得分:2)
我在这里找到了一个很好的解决方案:https://stackoverflow.com/a/6714561/958017
你可以在调用removeobserver时使用try-catch块:
@try{
[[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"showColorLabels"];
}@catch(id anException){
//Whatever you want to do.
}
答案 1 :(得分:0)
Welllll ....回答这个明显的问题:
您在哪里添加self
作为@"showColorLabels
密钥的观察者?
除非您首先明确地将对象添加为观察者,否则您不必调用-removeObserver:forKeyPath:
。