我有一个绑定到子类对象的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];
}
绑定如下:
内容->对象.availablevoices
内容值->object.availablevoices.name
不是调用
[Object valueForKeyPath:@"availableVoices.name"]
,而是对密钥路径中的每个密钥调用valueForKey:
。cc没有对cc的定义,所以它崩溃了。难道
availableVoices
不应该在name
之后调用吗? 最佳答案
你的评论说明了你所看到的事情的原因。如果“content”路径必须是“content values”的前缀,那么首先获取前者,然后获取相对于前者的后者是有意义的。尽管cocoa绑定使用kvo,但这并不意味着它必须使用valueForKeyPath
。