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