Фон
Я создаю список источников для своего приложения и хочу, чтобы он был структурирован аналогично iTunes с двумя типами элементов:
- "Фиксированные" предметы - они не меняются и не могут быть перемещены - вверху
- Редактируемые элементы внизу, которые могут быть изменены пользователем - перемещаться, переименовываться и т.д. (В примере iTunes, например, "Плейлисты" и "Смарт-плейлисты")
В моей аналогии с iTunes:
(источник: perspx.com)
До сих пор я структурировал свои данные следующим образом:
- Элементы, которые я хочу быть редактируемыми являются "группа" элементы, в виде
Group
лиц Core Data. - Каждый элемент в списке источников представлен как обычный объект Objective-C
SourceListItem
так что я могу связать каждый элемент с заголовком, значком, дочерними элементами и т.д. - Фиксированные элементы в настоящее время представлены экземплярами
SourceListItem
, хранящимися в массиве в моем объекте контроллера.
Вопрос
Я не уверен, как объединить эти два типа элементов в список источников, чтобы фиксированные элементы были вверху и всегда были там и не менялись, а редактируемые элементы - внизу, и их можно было перемещать и редактировать.
Вот идеи, которые я выдвинул до сих пор:
-
Добавьте фиксированные элементы в модель базовых данных. Это означает, что я могу создать сущность, представляющую элементы списка источников, и размещать мои фиксированные и редактируемые элементы в их экземплярах. Затем их можно привязать к столбцу таблицы Outline View с помощью контроллера Array/Tree. Однако это означает, что мне нужно создать новый объект для представления элементов списка источников, а затем синхронизировать
Group
с этим. Мне также нужно было бы каким-то образом создать все фиксированные элементы только один раз, и если что-то случится с любым из постоянных файлов хранилища, тогда фиксированные элементы не будут отображаться. -
Объедините фиксированные элементы с элементами группы. Хотя оба хранятся в отдельных массивах, это может быть сделано в контроллере для моего окна, когда Outline View запрашивает данные (если используется протокол
NSOutlineViewDataSource
, а не привязки). Однако это означает, что мне нужно будет создать новыйSourceListItem
для каждой группы в контроллере массива (чтобы связать каждую с иконками и другими атрибутами), сохранить их, а затем наблюдать за контроллером группового массива на предмет изменений, чтобы удалить, добавить или изменить экземплярыSourceListItem
когда изменения сделаны в группах.
У кого-нибудь есть лучшие идеи о том, как я могу это реализовать?
Мне бы хотелось, чтобы мое приложение было совместимо с OS X v10.5, поэтому я бы предпочел любые решения, не зависящие от установки Snow Leopard.