Как наблюдать изменения в элементах, содержащихся в NSArrayController - PullRequest
3 голосов
/ 16 февраля 2011

У меня есть объект, содержащий NSMutableArray с именем pointValue и несколько методов, включая setPointValue. Когда последний метод вызывается, он запускает другой метод saveTable, который сохраняет pointValue в файл (это csv, но здесь не имеет значения, как работают методы сохранения). Теперь у меня есть файл пера, который содержит NSTableView и NSArrayController, который связан с массивом в объекте. При нажатии кнопки в кончике он вызывает метод NSArrayController remove:, удаляя выбранный элемент, получая доступ к setPointValue, который сохраняет новый массив.

Это все работает отлично, моя проблема начинается, когда я вручную редактирую ячейку в таблице и нажимаю ввод, массив изменяется, но setPointValue не запускается и, следовательно, массив не сохраняется в файл.

Я совершенно ошеломлен, почему setPointValue не вызывается. Должен ли я связать элемент управления массива или столбцы таблицы с чем-то?

1 Ответ

2 голосов
/ 16 февраля 2011

Ваш NSArrayController только наблюдает за своим массивом содержимого.Вы хотите наблюдать значения объектов в этого массива, что не одно и то же.

Я бы настоятельно рекомендовал вам прочитать всю документацию по Наблюдение значения ключа и Привязки какао .

Вы увидите, что вам нужно наблюдать за элементами, когда они добавляются в ваш массив setPointValue, и прекращать наблюдать за ними, когда они удалены.Это можно сделать, создав методы доступа к индексированной коллекции для вашего setPointValue и настроив или отключив наблюдение за элементами, добавленными и удаленными в нем.Вам также нужно будет отреагировать на получение уведомления об изменениях в ваших наблюдаемых предметах, чтобы активировать ваш метод сохранения.

Sosborn верен - это фактически копия этого вопроса.См. Принятый ответ, предоставленный ФП для наиболее прямого решения (лучше, чем мой первоначальный ответ на этот вопрос).

...