как внести изменения в NSOutlineViewDataSource вызвать обновление других элементов - PullRequest
1 голос
/ 30 марта 2012

Я новичок в программировании Какао (но относительно опытный с другими UI-фреймворками) и не могу точно сказать, где я ошибаюсь следующая ситуация.

У меня есть «дерево» данных, которое упаковано в NSOutlineViewDataSource. Элементы очень простые для чтения / записи (думаю, флажки). Однако, когда

setObjectValue: (id) объект forTableColumn: (NSTableColumn *) tableColumn byItem: (id) item

При вызове

изменения, которые я делаю, влияют не только на отдельный элемент, о котором идет речь, но могут распространяться на другие элементы, т. Е. Проверка одного элемента может привести к тому, что другие элементы в дереве будут выделяться или отменяться. На уровне модели данных у меня это работает нормально. Моя проблема заключается в том, чтобы заставить контур обновиться, чтобы эти другие изменения появились в пользовательском интерфейсе.

Таким образом, в основном, когда setObjectValue вызывается, отдельная изменяемая ячейка обновляется, но мне нужно (потенциально) все дерево для обновления в пользовательском интерфейсе.

Каков наилучший практический механизм для выполнения чего-то подобного? Есть ли событие в NSOutlineView, которое я должен слушать, чтобы затем запустить обновление. Должен ли мой NSOutlineViewDataSource вызывать событие, которое прослушивает представление? Или мой основной подход совершенно неверен?

(на самом деле я делаю это с Monomac, но думаю, что любой ответ применим к какао в целом)

1 Ответ

1 голос
/ 30 марта 2012

Эндрю - самый простой способ сделать это - изучить программирование KVO. Если конкретный элемент, который вы хотите просмотреть, является KVO-совместимым, вы можете установить для него наблюдатель с помощью «addObserver». Затем вы реализуете делегатскую функцию «наблюдаю за пропуском» в классе наблюдателя и можете принудительно вносить изменения в интерфейс, когда эта функция уведомлена изменения стоимости, которую вы смотрите. Не все KVO-совместимы, поэтому ваш пробег может варьироваться в зависимости от характера того, что вы хотите отслеживать на предмет изменений. Но если вы просматриваете свойство в пользовательском объекте, то, безусловно, будет хорошо использовать KVO.

Руководство по программированию KVO находится здесь:

https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

...