KVO不能像com.alpha那样使用keypath。

我的NSMutableDictionary包含简单的键(@“one”,@“two”,@“three”)和复杂键(@“com.alpha”,@“com.beta”)。 是否有可能使用观察员复杂的关键?

观察者使用简单的键很好地工作,但没有使用复杂的键。 什么是解决scheme?

[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"); } 

您不能使用包含点的键. 用键值编码或键值观察。 该点用于构build用于指定要遍历的对象属性序列的关键path 。 (请参阅“键值编程编程指南”中的键和键path 。)

例如,

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

是相同的

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

对于单个键“com.alpha”,您将不得不将其重命名为例如“com_alpha”。

NSDictionary不符合键值观测。 您根本无法使用KVO观察对字典的更改。 即使它似乎在某些情况下工作,它可能在未来的版本中打破。

Interesting Posts