操纵核心数据中的关系

Manipulate Relationships in Core Data

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

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

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

anItem.parent = aParent

而且我知道它也会自动将 anItem 添加到 aParent.children。

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

我知道我可以简单地这样做:

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

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

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

看看this answer

这里有几个误解:

  1. CoreData 的对多关系不是 Array 类型,它们是 SetNSSet。这可以通过 Xcode.
  2. 生成子类来验证
  3. 可能存在有序关系 - 只需查看核心数据模型中的关系检查器即可。这会将其更改为 NSOrderedSet
  4. 关于 (2) 的主要警告 - 顺序完全由您添加它们的顺序决定 - 有关详细信息,请参阅 this link
  5. 按顺序存储它们会占用更多内存,如果可以的话,有一个属性可以用来在获取后对它们进行排序。