【发布时间】:2011-07-13 18:22:51
【问题描述】:
我之前使用过 NSNotifications,但这是我第一次尝试在 Cocoa Touch 中使用 KVO。
我的 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>
)
但是,我的 viewController 中的 observeValueForKeyPath 方法似乎从未被调用过。我设置了一个断点,即使我验证枚举已更改,也没有任何东西到达它。
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
[self.tableView reloadData];
}
感谢任何关于我所缺少的东西的想法。
【问题讨论】:
标签: iphone cocoa-touch key-value-observing