我有一个绑定到子类对象的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

10-02 02:01