J'ai un NSPopUpButton qui est lié à un objet sous-classé, avec les méthodes suivantes écrasées:liaisons Cocoa appellent valueForKey: au lieu de 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];
}
Les liaisons sont les suivantes:
- Contenu -> Object.availableVoices
- Valeurs de contenu -> Object.availableVoices.name
Au lieu de [Object valueForKeyPath:@"availableVoices.name"]
étant appelé, valueForKey:
est appelé sur chaque clé dans le chemin d'accès clé. availableVoices
n'a pas de définition pour name
alors il plante.
N'est-ce pas valueForKey:
est censé être appelé après valueForKeyPath:
, voire pas du tout?
C'est une bonne question, mais je me demande pourquoi vous ne liez pas directement les valeurs de contenu à availableVoiceNames. – stevesliva
@stevesliva Si le chemin de clé Valeurs de contenu ne démarre pas avec le chemin de clé de la liaison de contenu, la liaison Valeurs de contenu n'est pas prise en compte. – Alex
Les deux liaisons sont combinées à une liaison. – Willeke