2010-01-07 4 views
0

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

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

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

Что лучше всего для этого?

Заранее благодарен!

ответ

1

Это довольно широкий вопрос. Вы всегда должны хранить свои данные модели в каком-либо модельном объекте, будь то объект 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/

+0

откомандирован на 'NSTreeController'. Это, чтобы одолжить фразу, «мешок с болью». – Alex

Смежные вопросы