В настоящее время я использую NSTokenField с привязкой его значения к ключевому пути NSArrayController, настроенному в IB. Все это хорошо работает.
Теперь у меня возникли трудности с настройкой начального размера NSTokenField на исходные данные, которыми он заполняется NSArrayController — мне не хватает крючка, чтобы реагировать на устанавливаемое значение. Согласно Руководству Apple по привязке, объясняющий внутреннюю работу привязки на примере NSTextField (базового класса для NSTokenField), это должен быть setObjectValue:, который вызывается в какой-то момент для заполнения NSTokenField данными. Самое интересное, что этот метод никогда не вызывается. Итак, чтобы узнать, где еще поле токена получает данные от контроллера массива, я попробовал следующее:
- (void)setObjectValue:(id)objectValue {
[super setObjectValue:objectValue];
NSLog(@"? setObjectValue with: %@", objectValue);
}
- (void)setValue:(id)value forKey:(NSString *)key {
[super setValue:value forKey:key];
NSLog(@"? Set value %@ for key %@", value, key);
}
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath {
[super setValue:value forKeyPath:keyPath];
NSLog(@"? Set value %@ for keypath %@", value, keyPath);
}
- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *,id> *)keyedValues {
[super setValuesForKeysWithDictionary:keyedValues];
NSLog(@"? Set value for keys with dict %@", keyedValues);
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey,id> *)change
context:(void *)context {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
NSLog(@"? keyPath: %@ ofObject: %@ change: %@ context: %@", keyPath, object, change, context);
}
Ни один из этих методов никогда не срабатывает, по крайней мере, ни для одного из ключевых путей value NSTokenField. Итак - как является установить значение поля токена? На данный момент для меня это чистая магия, и ситуация оставляет меня в неведении.





Значение установлено в -[NSTokenFieldCell setObjectValue:]. Я не знаю, почему это ячейка, а не контрольная.