Nic*_*ick 8 iphone cocoa-touch key-value-observing
之前我曾使用过NSNotifications,但这是我第一次尝试在Cocoa Touch中使用KVO.
我的UITableView控制器在各种数据源之间切换,因此我将它们封装在不同的UITableViewDataSource子类中.我正在尝试让我的视图控制器观察这些UITableViewDataSource子类中的特定一个,并跟踪一个被称为loadState反映模型加载状态的枚举.
我像这样设置观察者:
[self.siteUpdatesDataSource addObserver:self
forKeyPath:@"loadState"
options:0
context:nil];
Run Code Online (Sandbox Code Playgroud)
从调试器我可以看到观察者已注册:
(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>
Run Code Online (Sandbox Code Playgroud)
)
但是,我的viewController中的observeValueForKeyPath方法似乎永远不会被调用.我设置了一个断点,即使我确认枚举已经改变,也没有任何东西可以达到它.
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
我很欣赏我所缺少的任何想法.
看不出任何问题.您确定loadState通过调用合成访问器或使用KVC或手动更改属性(通过willChangeValueForKey:和didChangeValueForKey:)?通知更改)
| 归档时间: |
|
| 查看次数: |
6861 次 |
| 最近记录: |