Привязка к ячейке NSTextField не работает, отредактированное значение сбрасывается к значению по умолчанию
Я работаю над приложением документов Core Data, которое динамически создает NSTableColumns
, Тип ячейки данных может быть флажком, ползунком и т. Д. Работает программная привязка ко всем типам ячеек, кроме NSTextFieldCell
,
Все NSTextFieldCells
не удается связать, и после редактирования они возвращаются к своему значению по умолчанию. Это происходит независимо от того, связаны ли они со строкой, числом (с NSNumberFormatter
применяется), или дата (NSDateFormatter
применяется). Я использую следующий формат, чтобы сделать все привязки:
NSDictionary *textFieldOpts = [NSDictionary dictionaryWithObjectsAndKeys:@"YES", NSContinuouslyUpdatesValueBindingOption, @"YES", NSValidatesImmediatelyBindingOption, nil];
[aCell bind:@"value" toObject:[[entryAC arrangedObjects] objectAtIndex:0] withKeyPath:@"numberData" options:textFieldOpts];
Опять же, эти операторы работают, если тип ячейки не является NSTextFieldCell
,
Я бросил в -observeValueForKeyPath
метод для регистрации, когда значение изменяется... и для других типов ячеек (NSSliderCell
например) я вижу изменение значения, но с NSTextFieldCell
Никогда, никогда не обновляет.
1 ответ
Оказывается, мне нужно было реализовать метод источника данных NSTableView setObjectValue, чтобы вручную получить изменение из NSTableView (View), а затем вручную установить данные в контроллере массива (Model), как показано в коде ниже:
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
[[[entryAC arrangedObjects] objectAtIndex:rowIndex] setValue:(NSNumber *)anObject forKey:@"numberData"];
}
По какой-то причине привязки к NSTextFieldCells, когда они устанавливаются программно для каждой ячейки, работают только одним способом: отображать только данные. Лично я бы классифицировал это как ошибку...