1

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

2 回答 2

5

您不能将包含点.的键用于键值编码或键值观察。点用于构建一个关键路径,用于指定要遍历的对象属性序列。(请参阅“键值编码编程指南”中的键和键路径。)

例如,

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

是相同的

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

对于单个键“com.alpha”,您必须将其重命名为“com_alpha”。

于 2013-01-05T14:43:25.107 回答
0

NSDictionary 不符合 Key-Value Observing。您根本无法使用 KVO 观察字典的更改。即使它似乎适用于某些情况,它也可能在未来的版本中中断。

于 2013-01-21T22:44:15.727 回答