Я раньше использовал NSNotifications, но впервые пытаюсь использовать KVO в Cocoa Touch.
Мой контроллер UITableView переключается между различными источниками данных, поэтому я инкапсулировал их в разные подклассы UITableViewDataSource. Я пытаюсь, чтобы мой контроллер представления наблюдал за определенным из этих подклассов UITableViewDataSource и отслеживал перечисление под названием loadState
, которое отражает модели в состоянии загрузки.
Я установил наблюдателя так:
[self.siteUpdatesDataSource addObserver:self
forKeyPath:@"loadState"
options:0
context:nil];
Из отладчика я вижу, что наблюдатель зарегистрирован:
(gdb) po [self siteUpdatesDataSource]
<SiteUpdatesTableViewDataSource: 0x651e5a0>
Current language: auto; currently objective-c
(gdb) po [[self siteUpdatesDataSource] observationInfo]
<NSKeyValueObservationInfo 0x651dd70> (
<NSKeyValueObservance 0x651dd10: Observer: 0xc80f1e0, Key path: loadState, Options: <New: NO, Old: NO, Prior: NO> Context: 0x0, Property: 0x651dd90>
)
Тем не менее, мой метод наблюденийValueForKeyPath в моем viewController никогда не вызывается. Я устанавливаю точку останова, и ничто не достигает ее, даже когда я проверяю, что перечисление изменилось.
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
[self.tableView reloadData];
}
Я ценю любые мысли о том, что мне не хватает.