2010-09-06 4 views
1

У меня есть NSMutableArray, который имеет около 18 объектов. Они в определенном порядке, что я хочу. Я должен добавить эти объекты в NSSet для сохранения в Core Data.iPhone: NSSet сохранить порядок сортировки

Но, как только я вытаскиваю их из NSS, используя [myObject.items allObjects], он не сохраняет исходный порядок, который я добавил в качестве объектов. Как я могу сохранить порядок, который хочу, я не хочу прибегать к ним.

ответ

1

Если вы не хотите сортировать их, вы можете добавить объект (например, int indexInList) к объектам, который обозначает позицию в списке.

Но сортировка списка по отношению к свойству объектов было бы тоже очень просто с

- (void)sortUsingSelector:(SEL)comparator 
- (void)sortUsingDescriptors:(NSArray *)sortDescriptors 
... 
+0

Хорошо, но мое замешательство объясняется тем, почему оно автоматически не сохраняет порядок сортировки, когда я добавляю объект в NSSet. –

+1

У комплектов нет заказа. Это фундаментальное свойство множества. –

+0

Из-за этого вы не можете иметь один объект дважды в наборе - в массиве это возможно! – brutella

4

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

Основные данные используют наборы, потому что они должны точно знать, какие объекты связаны друг с другом. В большинстве случаев любое упорядочение, например, алфавитный, цифровой и т. д. необходим только пользовательскому интерфейсу и не играет роли в реальном моделировании реальных объектов, событий или условий, имитирующих модель данных. Например, если у вас была модель Department<-->>Employee, все сотрудники, принадлежащие к определенному отделу, будут содержать набор. Возможно, вам придется сортировать сотрудников по имени, дате рождения, дате найма и т. Д., Но это было бы просто для отображения и не имело бы никакого отношения к отношениям.

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

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