2013-01-05 75 views
0

我的NSMutableDictionary包含簡單鍵(@「one」,@「two」,@「three」)和複雜鍵(@「com.alpha」,@「com.beta」)。是否有可能使用觀察員的複雜的關鍵?KVO不適用於像com.alpha這樣的keypath。

觀察者可以使用簡單的鍵很好地工作,但是沒有使用複雜的鍵。什麼是解決方案?

[self.dict addObserver:self forKeyPath:@"com.alpha" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil]; 

-(IBAction) onChange:(id)sender 
{ 
[self.dict setObject:@"newValue" forKey:@"com.alpha"]; 
} 

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    NSLog(@"____ value had changed"); 
} 

回答

4

不能使用含有點.鍵 - 值編碼或鍵 - 值觀察鍵。該點用於構建關鍵路徑,用於指定要遍歷的對象屬性序列。 (見 「鍵 - 值編碼編程指南」 中Keys and Key Paths。)

例如,

id x = [object valueForKeyPath:@"com.alpha"]; 

相同

id x = [[object valueForKey:@"com"] valueForKey:@"alpha"]; 

對於單個鍵 「com.alpha」,你將不得不重新命名爲例如「com_alpha」。

0

NSDictionary不符合鍵值觀測。您無法觀察使用KVO對字典所做的更改。即使它看起來在某些情況下可能會在未來版本中崩潰。