Я новичок в программировании Cocoa (но относительно опытный с другими инфраструктурами пользовательского интерфейса) и не могу точно сказать, где я ошибаюсь в в следующей ситуации.Как внести изменения в NSOutlineViewDataSource инициировать обновление других элементов
У меня есть «дерево» данных, которое обернуто NSOutlineViewDataSource. Элементы очень простые чтения/записи (думаю, флажки). Однако, когда
setObjectValue: (идентификатор) объекта forTableColumn: (NSTableColumn *) TableColumn byItem: (идентификатор) пункт
называется, изменения, которые я делаю не только влияют на один элемент в вопросе, но может распространяться другим элементам, то есть проверка одного элемента может привести к тому, что другие элементы в дереве будут выбирать или отменять выбор. На уровне модели данных у меня это нормально работает. Моя проблема каким-то образом вынуждает контур обновляться, чтобы эти другие изменения отображались в пользовательском интерфейсе.
Так что в основном, когда setObjectValue называется отдельной ячейкой, которая была изменена, обновляется, но мне нужно (потенциально) все дерево обновить в пользовательском интерфейсе.
Что такое механизм наилучшей практики для выполнения чего-то подобного? Есть ли событие NSOutlineView, которое я должен прослушивать, чтобы вызвать обновление. Должен ли мой NSOutlineViewDataSource поднимать событие, которое прослушивает просмотр? Или мой основной подход совершенно неправильный?
(я на самом деле делать это с Monomac, но я думаю, что любой ответ относится к какао в целом)
Так контроллер держит мой взгляд контура будет создан, чтобы быть наблюдателем для всех элементов данных? И тогда он может вызвать обновление и т. Д., Вызвав reloadData() в виде контура, если он сочтет это необходимым? –
Да, это общая идея. Вы можете установить «addObserver» для себя, а затем убедитесь, что в этом контроллере реализована функция observValueForKeyPath. –