Это довольно широкий вопрос. Вы всегда должны хранить свои данные модели в каком-либо модельном объекте, будь то объект Core Data, NSMutableDictionary
или пользовательский объект вашего собственного создания. Вы не должны НЕ хранить данные в экземпляре NSTreeController
или NSOutlineView
, это не объекты модели.
Если вы используете базовые данные для остальной части своего приложения, и вам нужно сохранить данные, которые обрабатываются контурным представлением, это хороший выбор, но это может быть излишним, если у вас есть только простые требования.
Для управления отображением в виде схемы вы можете использовать NSTreeController
или свой собственный объект контроллера, который отвечает на протоколы данных NSOutlineView
и делегирует их. На практике вы можете использовать оба варианта, поскольку некоторые вещи, такие как элемент или элемент элемента, могут управляться только с помощью методов делегатов NSOutlineView
.
В моем личном опыте я обнаружил, что NSTreeController
может быть очень сложно справиться с чем-либо, кроме очень простых задач, и теперь я больше использую его, я считаю, что гораздо проще использовать методы источника данных в моем собственном контроллере.
Что касается изменения содержимого контура, вы всегда должны изменять модель с помощью контроллера, вы не должны обновлять представление напрямую. Вы использовали бы такие методы, как -add:
, в своем контроллере или используете метод -add:
NSTreeController
, если вы используете его.
Контроллер вашего вида должен затем обнаружить изменение в модели и попросить обновить представление. Контроллер представления и контроллер модели могут быть одним и тем же объектом, но они не обязательно должны быть. Замечание по ключевому значению - полезная технология, которая может сообщить вашему контроллеру об изменении модели.
Вот некоторые примеры кода от Apple, которые могут оказаться полезными:
http://developer.apple.com/mac/library/samplecode/SourceView/
http://developer.apple.com/Mac/library/samplecode/AbstractTree/
откомандирован на 'NSTreeController'. Это, чтобы одолжить фразу, «мешок с болью». – Alex