使用绑定时 NSTokenField 的值到底应用在哪里?

Where exactly is value of NSTokenField applied when using Binding?

我目前正在使用 NSTokenField 并将其值绑定到 IB 中配置的 NSArrayController 键路径。这一切都很好。

现在我很难将 NSTokenField 的初始大小调整为由 NSArrayController 填充的初始数据 - 我缺少一个钩子来对设置的值做出反应。 According to Apple's Binding GuideNSTextFieldNSTokenField 的基础 class)为例解释绑定的内部工作原理 它应该是 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);
}

这些方法中没有一个会触发,至少不会触发 NSTokenField 的任何 value 关键路径。那么——token字段的值是怎么设置的呢?目前对我来说这纯粹是魔法,情况让我一无所知。

值设置在-[NSTokenFieldCell setObjectValue:]。不知道为什么是cell而不是control