【问题标题】:KVO doesn't work with keypath like com.alpha.KVO 不适用于 com.alpha 之类的 keypath。
【发布时间】:2012-12-19 19:32:35
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您不能将包含点 . 的键用于键值编码或键值观察。点用于构建一个键路径,用于指定要遍历的对象属性序列。 (参见《键值编码编程指南》中的Keys and Key Paths。)

    例如,

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多