Cocoa 绑定调用 valueForKey: 而不是 valueForKeyPath:



我有一个绑定到子类化对象的NSPopUpButton,覆盖了以下方法:

- (id)valueForKeyPath:(NSString *)keyPath {
NSLog(@"valueForKeyPath: %@", keyPath);
if ([keyPath hasSuffix:@"availableVoices.name"]) {
return self.availableVoiceNames;
} else {
return [super valueForKeyPath:keyPath];
}
}
- (id)valueForKey:(NSString *)key {
NSLog(@"valueForKey: %@", key);
return [super valueForKey:key];
}

绑定如下所示:

  • 内容 -> 对象可用语音
  • 内容价值 -> Object.availableVoices.name

不是调用[Object valueForKeyPath:@"availableVoices.name"],而是在密钥路径中的每个密钥上调用valueForKey:availableVoices没有name的定义,因此它会崩溃。

valueForKey:不应该在valueForKeyPath:之后被称为,如果有的话?

您的评论表明了您所看到的内容的原因。如果"内容"路径必须是"内容值"路径的前缀,那么首先获取前者,然后获取相对于它的后者是有意义的。此外,尽管Cocoa Bindings使用KVO,但这并不意味着它必须使用valueForKeyPath

最新更新