Cocoa touch UIWebView KVO兼容吗?

Cocoa touch UIWebView KVO兼容吗?,cocoa-touch,uiwebview,key-value-observing,Cocoa Touch,Uiwebview,Key Value Observing,我已经设置了KVO通知来观察UIWebView的一些属性,如下所示 [webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:NULL]; 而且 - (void)observeValueForKeyPath:(NSString *)keyPath

我已经设置了KVO通知来观察UIWebView的一些属性,如下所示

[webView addObserver:self 
          forKeyPath:@"canGoBack"
             options:NSKeyValueObservingOptionNew
             context:NULL];
而且

- (void)observeValueForKeyPath:(NSString *)keyPath 
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context

但它从未被呼叫过。我是缺少了什么还是UIWebView只是不可见?

canGoBack
是一个
只读的属性:为了使它符合KVO,它必须在其实现中将该属性重新声明为
readwrite
,然后通过综合设置器设置该属性。我怀疑canGoBack只是通过其ivar设置的,不会通过KVO系统发送通知:

[self setCanGoBack:YES]; // Would notify KVO observers (as long as any reimplementation of automaticallyNotifiesObserversForKey does place restrictions)
_canGoBack = YES; // Would not notify KVO observers
这一相关问题详细讨论了这一问题:


作为一种解决方法,您可以在
[UIWebViewDelegate webViewDidFinishLoad:

中设置并检查
[UIWebView canGoBack]
的值。参考文档没有声明UIWebView符合KVO,因此我假设它不符合。好的,谢谢。我认为可能是这样的,但我在这里看到一些人认为是这样的。虽然
UIWebView
canGoBack
方面不符合KVO标准可能是正确的,但您的解释是不正确的。实现可观察的只读属性是完全可能的(也是常见的)(例如,请参见NSOperationQueue的
操作
)。可观察性与读写/只读无关。正确的答案应该是,除非文档明确说明,否则任何东西都是不可观察的。我的答案中哪一部分是不正确的?“可观察性与读写/只读无关”:同意,这就是为什么我解释了一个属性是
只读的
是如何间接影响可观察性的。我投了反对票,因为我认为你的答案是误导性的:你没有说明最重要的事实,即可观察性必须被记录下来,并且不能从界面中以某种方式扣除。酷,继续,然后提交你自己的答案:)嗯,我同意,这有点误导。很遗憾,
canGoBack
是不可见的,但它根本不可见,因为它是一个只读属性。它只是不可见,它的“为什么”隐藏在UIWebView的实现背后。