Базовые данные: отношение «ко многим», упорядоченное после перезапуска

Когда я перезапускаю приложение Core Data с отношением ко многим, мои данные (представленные в NSTableView) располагаются в случайном порядке. Как сохранить его в том порядке, в котором пользователь оставил его перед выходом из приложения?

Конечно, я могу сортировать данные в awakeFromNib, но это не дает мне точного порядка, который пользователь использовал для упорядочения данных (например, он может переставлять строки вручную).

Детали моего документа: у меня есть объект «Отношение» в отношении ко многим с объектом «Карта», управляемый NSArrayController. Карта имеет 2 атрибута: «номер» (int) и «имя» (String), отображаемые через привязки в двух столбцах NSTableView. Сортировка осуществляется нажатием на заголовки таблиц.

Как сохранить порядок сортировки?


person Core    schedule 02.08.2010    source источник


Ответы (1)


Core Data не поддерживает упорядоченные коллекции (например, NSArray). Это сделано для поддержки таких вещей, как получение только небольшого подмножества информации без извлечения всего хранилища. Вот почему результаты всегда предоставляются в NSSet (неупорядоченная коллекция).

Единственный способ сохранить какой-либо порядок сортировки — это добавить свойство к вашей сущности, например sortOrder, и убедиться, что оно установлено на что-то допустимое. Затем вы можете установить дескрипторы сортировки ваших контроллеров массива для сортировки по возрастанию по sortOrder. Точно так же, если вы выполняете выборку вручную с помощью NSFetchRequest, вы также можете установить его дескрипторы сортировки.

Обновление для Lion (10.7)

Если вы ориентируетесь на версию 10.7 и выше в своем приложении, NSManagedObject теперь дает вам упорядоченные отношения. Используйте -mutableOrderedSetValueForKey: и -mutableOrderedSetValueForKey: для установки и получения NSOrderedSets. Ура!

person Joshua Nozzi    schedule 02.08.2010
comment
Есть ли примеры того, как на самом деле использовать NSOrderedSet? Скажем, в NSTableView или NSOutlineView? - person Tony; 20.12.2011
comment
На основании примечаний к выпуску ( developer.apple.com /library/mac/#releasenotes/DataManagement/ ) Я думаю, что в основном все изменения сортировки и перетаскивания привязок напрямую влияют на порядок при использовании NSOrderedSet. Вот и все: измените порядок объектов в наборе, и он сохранится. - person Joshua Nozzi; 20.12.2011