3
我已經被綁定到一個子類對象時,用下面的方法的一個NSPopUpButton覆蓋:Cocoa綁定調用valueForKey:代替valueForKeyPath:
- (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
- 含量值 - > Object.availableVoices.name
而不是調用[Object valueForKeyPath:@"availableVoices.name"]
,在密鑰路徑中的每個密鑰上調用valueForKey:
。 availableVoices
沒有name
的定義,所以它崩潰了。
是不是valueForKey:
應該在valueForKeyPath:
之後調用?
這是一個很好的問題,但我不知道爲什麼你不直接將內容值綁定到availableVoiceNames。 – stevesliva
@stevesliva如果內容值鍵值路徑不是以內容綁定的鍵路徑開始,則內容值綁定將被忽略。 – Alex
兩種綁定都合併爲一種綁定。 – Willeke