Соответствует ли UIWebView KVO? - PullRequest
8 голосов
/ 16 ноября 2011

Я настроил уведомление 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 просто не наблюдается?

1 Ответ

11 голосов
/ 25 октября 2012

canGoBack является свойством readonly: для того, чтобы оно было 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

В этом связанном вопросе подробно обсуждается проблема: Возможно линаблюдать свойство readonly объекта в Cocoa Touch?

В качестве обходного пути вы можете установить UIWebViewDelegate и проверить значение [UIWebView canGoBack] в [UIWebViewDelegate webViewDidFinishLoad:].

...