我有一个绑定到子类对象的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 valueForKeyPath:@"availableVoices.name"]
,而是在密钥路径中的每个密钥上调用valueForKey:
。 availableVoices
没有name
的定义,因此崩溃了。
valueForKey:
是否应该在valueForKeyPath:
之后被调用,如果有的话?
答案 0 :(得分:0)
您的评论表明了您所看到的原因。如果“内容”路径必须是“内容值”的前缀,那么首先获得前者然后相对于它的后者是有道理的。尽管Cocoa Bindings使用KVO并不意味着 使用valueForKeyPath
。