Ich habe ein NSPopUpButton, die zu einer Unterklasse Objekt gebunden ist, mit den folgenden Methoden überschrieben:Cocoa Bindungen ValueForKey nennen: Statt 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];
}
Die Bindungen sind wie folgt:
- Inhalt -> Object.availableVoices
- Inhalt Werte -> Object.availableVoices.name
Statt [Object valueForKeyPath:@"availableVoices.name"]
wird aufgerufen, valueForKey:
wird für jeden Schlüssel im Schlüsselpfad aufgerufen. availableVoices
hat keine Definition für name
, so dass es abstürzt.
Soll nicht valueForKey:
nach valueForKeyPath:
aufgerufen werden, wenn überhaupt?
Es ist eine gute Frage, aber ich frage mich, warum Sie die Inhaltswerte nicht einfach direkt an availableVoiceNames binden. – stevesliva
@stevesliva Wenn der Schlüsselpfad für Inhaltswerte nicht mit dem Schlüsselpfad der Inhaltsbindung beginnt, wird die Inhaltswertbindung ignoriert. – Alex
Beide Bindungen sind zu einer Bindung kombiniert. – Willeke