gpt4 book ai didi

objective-c - cocoa - -removeObserver :forKeyPath: and -removeObserver:forKeyPath:context:? 之间的细微差别

转载 作者:行者123 更新时间:2023-12-03 16:22:10 24 4
gpt4 key购买 nike

简短版本:

-removeObserver:forKeyPath:有什么用? ?

为什么不总是使用 -removeObserver:forKeyPath:context:

长版

在开发 Cocoa 程序时,我发现使用 -removeObserver:forKeyPath:可能(但并不总是)导致如下错误:

Cannot remove an observer <ObservedClass 0x1001301d0> for the key path "exampleKeyPath" from <__NSCFConstantString 0x100009138> because it is not registered as an observer.

使用-removeObserver:forKeyPath:context:时相反,效果会很好。

由于在设置观察时需要指定上下文(使用 -observeValueForKeyPath:ofObject:change:context: ),我很困惑为什么 context: -存在较少的删除方法。

基于我对 NSKeyValueObserving Protocol 的阅读,我认为删除可能适用于所有上下文中的指定观察者和指定关键路径,但-removeObserver:forKeyPath:的失败(没有上下文)作为 -removeObserver:forKeyPath:context: 的替代品(上下文为 NULL )似乎否定了这个想法。

那么:为什么我会出现这个错误? -removeObserver:forKeyPath: 是什么意思?与上下文有关吗?它与 context: 有什么不同? -装备好的弟弟妹妹?

代码示例

有问题的代码:

-(void) invalidate {
[(id)observedObject removeObserver:self
forKeyPath:@"exampleKeyPath"];
}

没有问题的代码:

-(void) invalidate {
[(id)observedObject removeObserver:self
forKeyPath:@"exampleKeyPath"
context:NULL];
}

最佳答案

简短版本:-removeObserver:forKeyPath:context: 仅在 10.7 中引入,因此两者都是。

长版:为什么会出现错误?看起来像是一个错误,无论是在您的代码还是系统中(我从未见过该错误并且经常使用较短的版本)。这两种方法的描述并不表明应该有任何区别。如果没有其他人提出解释,并且您在代码中找不到任何内容,请向 Apple 报告错误。

关于objective-c - cocoa - -removeObserver :forKeyPath: and -removeObserver:forKeyPath:context:? 之间的细微差别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16804502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com