Я всегда использую:
p^=True
Если p является логическим, оно переключается между истинным и ложным.
Это один из способов. Другим способом было бы, чтобы модель отправляла уведомления, когда она менялась, и наблюдал их контроллер.
Кроме того, модель обычно не изменяется спонтанно. Обычно изменение инициируется за пределами модели в ответ на какое-либо событие. Обычно это делает контроллер. Таким образом, этот контроллер также может спровоцировать обновление в виде схемы. (Может быть несколько контроллеров, поэтому, возможно, контроллер, который инициирует изменение модели, просто информирует контроллер окна или представления, который будет отвечать за обновление плана.)
Я задал аналогичный вопрос, который был отмечен как дубликат здесь: Рекомендуемый шаблон для наблюдения изменений структуры дерева [duplicate]
Я хотел избежать использования NSTreeController, поскольку это означает, что вы потерять управление анимацией при появлении обновлений.
У меня установлен MVVM. Моя модель представляет собой график, моя модель представления - это дерево. Между любыми узлами дерева и узлом графа существует одно отношение. Как подробно описано выше, между узлами дерева и контурным представлением очевидно много отношений.
Итак, я установил ...
Модель просмотра узлы дерева должны знать, когда их дети обновлены, поэтому я использовал KVO связанного узла графа, чтобы поймать, когда дочерние элементы добавлены или удалены.
Для обновления внешнего вида я остановился на делегате модели представления, который Я реализую на контроллере view. Каждый древовидный узел в модели представления может вызвать методы делегирования в корне дерева при добавлении или удалении дочерних элементов. Это чувствовало самый ясный подход ко мне и легко отлаживаемое. Я не хотел, чтобы цепочки происходили за кулисами.
Окончательный вызов обновления на основе внешнего вида чувствовал себя достаточно простым:
func itemsInserted(atIndexes indexes: IndexSet, forParent parent: ECViewModelNode) {
outlineView?.insertItems(at: indexes, inParent: parent, withAnimation: .slideDown)
}
На уровне ячеек таблицы я связываю непосредственно к деталям узлов модели графа.