Какао - что является лучшим способом для изменения NSOutlineView - PullRequest
0 голосов
/ 07 января 2010

Результатом будет панель настроек с OutlineView и кнопками «добавить элемент», «добавить группу» и «удалить». Кнопки добавляют записи в NSOutlineView. Данные хранятся в NSMutableDictionary (или в любом другом подходящем). Сортировка / DragDrop включена для OutlineView.

Каков наилучший или наиболее удобный способ для этого (и писать меньше кода)?

Изменяя NSMutableDictionary, NSOutlineView обновляется из NSMutableDictionary? Изменяя NSOutlineView, Результат хранится в NSMutableDictionary? ... NSTreeController? ... CoreData?

Какая лучшая практика для этого?

Заранее спасибо!

1 Ответ

1 голос
/ 07 января 2010

Это довольно широкий вопрос. Вы всегда должны хранить данные модели в каком-либо объекте модели, будь то объект Core Data, NSMutableDictionary или пользовательский объект вашего собственного создания. Вы определенно НЕ должны хранить данные в экземпляре NSTreeController или NSOutlineView, это не объекты модели.

Если вы используете Core Data для остальной части своего приложения и вам необходимо сохранить данные, которыми манипулирует представление структуры, то это хороший выбор, но он может быть излишним, если у вас есть только простые требования.

Для управления тем, что отображается в виде структуры, вы можете использовать NSTreeController или свой собственный объект контроллера, который отвечает на источник данных NSOutlineView и протоколы делегирования. На практике вы можете использовать и то и другое, поскольку некоторые вещи, такие как то, является ли элемент элементом группы или нет, могут управляться только с помощью методов делегата NSOutlineView.

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

Что касается изменения содержимого контурного вида, вы всегда должны модифицировать модель через контроллер, вы никогда не должны обновлять вид напрямую. Вы могли бы реализовать такие методы, как -add: в вашем контроллере или использовать метод -add: для NSTreeController, если вы его используете.

Затем контроллер вашего представления должен обнаружить изменение в модели и попросить обновить представление. Контроллер вида и контроллер модели могут быть одним и тем же объектом, но это не обязательно. Наблюдение значения ключа - это полезная технология, которая может информировать вашего контроллера об изменении модели.

Вот пример кода от Apple, который может оказаться полезным:

http://developer.apple.com/mac/library/samplecode/SourceView/

http://developer.apple.com/Mac/library/samplecode/AbstractTree/

...