Таблица не обновляется в соответствии с привязками - часть вторая - PullRequest
2 голосов
/ 20 декабря 2009

Название заимствовано из этого вопроса , из которых этот не является дубликатом. Посмотрите мой ответ там, что было неправильно для этого спрашивающего; Я являюсь автором этого ответа, и моя проблема не в этом.

У меня есть табличное представление с тремя столбцами, привязки значений которых привязаны к трем свойствам arrangedObjects контроллера массива. Контроллер массива contentArray привязан к visitationResults моего объекта документа; элементы в этом массиве являются экземплярами модельного класса (VisitationResult). Я также привязал selectionIndexes и sortDescriptors контроллера массива к свойствам моего документа.

Я мутирую свою собственность через пару аксессоров:

- (void) addVisitationResult:(VisitationResult *)newVisitationResult {
    [self insertObject:newVisitationResult inVisitationResultsAtIndex:[self countOfVisitationResults]];
    NSLog(@"arrayController arrangedObjects: %@", [arrayController arrangedObjects]);
}

Этот оператор NSLog выполняется и подтверждает, что контроллер массива собирает и упорядочивает объекты моей модели. Это означает, что я просматриваю свою собственность и получаю уведомления KVO для моего документа (что доказывает, что проблема, возникшая у ранее задававшего вопрос - обойти свойство, не является моей проблемой).

Я добавил NSLog операторов в методы доступа класса моей модели. Один из них вызывается контроллером массива для сортировки объектов (это свойство является ключом сортировки). Два других, о которых контроллер массива не знает, никогда не будут вызваны.

Таким образом, мое табличное представление остается пустым.

1 Ответ

6 голосов
/ 20 декабря 2009

Я обнаружил проблему: это потому, что я явно связал привязки selectionIndexes и sortDescriptors табличного представления.

Во всяком случае, в этом не было необходимости: я только что проверил, а в документации написано:

selectionIndexes

Как правило, selectionIndexes автоматически связывается с NSArrayController, с которым связан первый NSTableColumn.

sortDescriptors

Обычно эта привязка создается автоматически, привязываясь к дескрипторам сортировки NSArrayController изначально связанной NSTableColumn.

Похоже, что это не только не нужно, но и связывание одного или обоих из этих двух нарушит представление таблицы.

...