7
我之前使用過NSNotifications,但這是我第一次嘗試在Cocoa Touch中使用KVO。KVO - observeValueForKeyPath在觀察枚舉時未調用
我的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>
)
但是,我observeValueForKeyPath方法在我的viewController似乎從未被稱爲。我設置了一個斷點,即使在我確認枚舉已經改變的時候,也沒有任何東西可以達到它。
- (void) observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
[self.tableView reloadData];
}
我很欣賞任何想法,我失蹤。
謝謝你做了這個伎倆。我會嘗試嘗試多一點,並找出爲什麼枚舉似乎不會產生變化。我使用合成的setter和getter來獲取枚舉值並通過它們更新self.loadState = kDataReady,例如 – Nick 2011-03-11 21:01:54
等等,你說'做了訣竅',下一行你說'enum doesn' t看起來會產生變化',它是否工作或沒有?我沒有合成枚舉屬性的問題。 – hoha 2011-03-11 22:46:58
對不起,這是行得通的。後來我發現我在一個地方設置了我的枚舉不正確。StackOverflow很不幸在read-只有當我停止回到updaet模式時,即使我的問題是其他問題,也不好意思在這裏,這種方法使我能夠觸發觀察者事件並幫助我追蹤這個問題。 – Nick 2011-03-12 04:08:48