Как указывал @noa, вы просматриваете привязку для ячейки , но изменяете привязку для ее элемента управления . Это обязательно ( гм ), чтобы вызвать проблемы.
Заменить это:
[textField bind:NSValueBinding
toObject:[currentBindInfo valueForKey:NSObservedObjectKey]
withKeyPath:@"objectValue.iLifeProductName"
options:[currentBindInfo valueForKey:NSOptionsKey]];
с этим:
[textFieldTableViewCell bind:NSValueBinding
toObject:[currentBindInfo valueForKey:NSObservedObjectKey]
withKeyPath:@"objectValue.iLifeProductName"
options:[currentBindInfo valueForKey:NSOptionsKey]];
И посмотри, работает ли он лучше.
Объяснение этому немного загадочное, и я делаю это по памяти, поэтому, пожалуйста, извините, если я неправильно понял некоторые детали.
Поскольку NSControls и их NSCell работают так тесно друг с другом, в большинстве случаев вы можете связываться либо с элементом управления, либо с ячейкой, и вы получите очень похожие результаты. То есть в элементе управления есть код для вызова соответствующих методов на его NSCell, если элемент управления был привязан, и наоборот.
Это означает, что если в XIB вы привязываетесь к одной или другой вещи, это будет работать, что хорошо. Это также означает, что вы можете привязать к ячейке в случаях, когда у вас есть несколько ячеек на просмотр, так что это хорошо. ОДНАКО, это может привести к путанице, потому что на самом деле вы можете связать как свою точку зрения, так и ее ячейку, и на самом деле связать их по-разному, и тогда они столкнутся.
В вашем примере, я полагаю, вы добавляете вторую привязку к NSControl в дополнение к привязке на его NSCell. Вы связаны дважды. Это не хорошо.
С точки зрения наилучшей практики, я стараюсь привязываться только к NSControls, если у меня нет веских причин переходить на NSCells. Отчасти потому, что это соответствует тому, что я делаю в XIB, отчасти потому, что любой стандарт помогает решить именно эту проблему, а отчасти потому, что NSCells мягко не рекомендуется.