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

时间:2013-01-05 14:33:46

标签: ios observer-pattern key-value-observing

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

2 个答案:

答案 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观察字典的更改。即使它似乎适用于某些情况,它可能会在未来版本中中断。