Привязка к ячейке NSTextField не работает, отредактированное значение сбрасывается к значению по умолчанию - PullRequest
1 голос
/ 31 марта 2010

Я работаю над приложением документов 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 Ответ

0 голосов
/ 01 апреля 2010

Оказывается, что мне нужно было реализовать метод источника данных 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, если они установлены программно для каждой ячейки, работают только одним способом: отображать только данные. Лично я бы отнес это к ошибке ...

...