处理核心数据中的关系

时间:2016-05-27 16:37:13

标签: ios swift core-data relationship nsmanagedobject

我有一个NSManagedObject子类定义如下:

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

为了设置'parent'属性,我使用它:

anItem.parent = aParent

而且我知道它会自动将一个项目附加到aParent.children。

但是,我希望将子项添加到特定位置。 这个想法是有一个排序的孩子阵列。

我知道我可以这样做:

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

但是有没有任何方法可以覆盖或运算符重载以自动实现?

2 个答案:

答案 0 :(得分:2)

在您获取时,将子项插入特定位置将无法确保相同的排序顺序。 在获取期间,您将需要一个附加属性来定义排序顺序。

查看this answer

答案 1 :(得分:1)

这里有一些误解:

  1. CoreData to-many关系的类型不是Array,而是SetNSSet。这可以通过让您的子类由Xcode生成来验证。
  2. 可以建立有序关系 - 只需查看核心数据模型中的关系检查器即可。这会将其更改为NSOrderedSet
  3. MAJOR CAVEAT to(2) - 订单仅由您添加的订单确定 - 有关详细信息,请参阅this link
  4. 如果可以的话,按顺序存储这些内存要大得多,如果可以的话,可以使用一个属性来获取它们之后对它们进行排序。