我的NSMutableDictionary包含简单的键(@“one”,@“two”,@“three”)和复杂键(@“com.alpha”,@“com.beta”)。是否可以将观察者用于复杂的密钥?
观察者使用简单的键可以很好地工作,但是没有使用复杂的键。什么是解决方案?
[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");
}
答案 0 :(得分:5)
您不能将包含点.
的键与键值编码或键值观察一起使用。该点用于构建密钥路径,用于指定要遍历的对象属性序列。 (参见“键值编码编程指南”中的Keys and Key Paths。)
例如,
id x = [object valueForKeyPath:@"com.alpha"];
与
相同id x = [[object valueForKey:@"com"] valueForKey:@"alpha"];
对于单个键“com.alpha”,您必须将其重命名为例如“com_alpha”。
答案 1 :(得分:0)
NSDictionary不符合Key-Value Observing。您根本无法使用KVO观察字典的更改。即使它似乎适用于某些情况,它可能会在未来版本中中断。