Основные данные: отношение «многие ко» упорядочено при перезапуске - PullRequest
4 голосов
/ 02 августа 2010

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

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

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

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

1 Ответ

10 голосов
/ 02 августа 2010

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

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

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

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

...