2016-05-27 2 views
0

Я подкласс NSManagedObject определен следующим образом:Манипулирование Отношения в Core Data

extension Item { 
    @NSManaged var name: String 
    @NSManaged var parent: Item 
    @NSManaged var children: [Item] 
} 

Для того, чтобы установить атрибут «родительский», я использую это:

anItem.parent = aParent 

И я знаю, что это будет автоматически добавьте anItem в aParent.children.

Однако, я хотел бы, чтобы дочерний элемент был добавлен в определенную позицию. Эта идея состоит в том, чтобы иметь отсортированный массив детей.

Я знаю, что я мог бы просто сделать это:

aParent.childen.insert(anItem, atIndex: specificPosition) 

Но есть ли способ, чтобы переопределить или оператор перегрузки, чтобы автоматически достичь этого?

+0

Должно ли не многие отношения использовать NSSet или NSOrderedSet вместо массива? – bbarnhart

+0

Кажется, вы можете заменить NSOrderedSet на Array в подклассе. Меня устраивает. – nouatzi

ответ

2

Вставка ребенка в конкретное положение не будет обеспечивать тот же порядок сортировки позже, когда вы извлечете. Для определения порядка сортировки во время выборки вам понадобится дополнительный атрибут.

Посмотрите this answer

+0

Право, PS: возможно, это может дать ему другой атрибут объекту, или вам нужно выяснить способ, когда вы пытаетесь его выполнить (выполнить). – antonio081014

+0

Да, ты прав. Поэтому я удивляюсь, когда будет иметь смысл определить отношения «многие ко многим» как упорядочено? Зная, что он будет упорядочен в выборке. – nouatzi

1

пару заблуждений здесь:

  1. CoreData к-многим не типа Array, они Set или NSSet. Это можно проверить, если ваш подкласс создан Xcode.
  2. Возможно иметь упорядоченные отношения - просто взгляните на инспектора отношений в вашей базовой модели данных. Это изменит его на NSOrderedSet
  3. MAJOR CAVEAT to (2) - Заказ определяется исключительно заказом, который вы добавляете - см. this link для получения дополнительной информации.
  4. Это гораздо больший объем памяти, чтобы хранить их как упорядоченные, если можно, атрибут, который вы можете использовать для их заказа после извлечения.
Смежные вопросы