【问题标题】:Manipulate Relationships in Core Data操纵核心数据中的关系
【发布时间】:2016-05-27 16:37:12
【问题描述】:

我有一个这样定义的 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)

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

【问题讨论】:

  • 不应该使用 NSSet 或 NSOrderedSet 来代替数组吗?
  • 看来您可以在子类中将 NSOrderedSet 替换为 Array。它对我有用。

标签: ios swift core-data relationship nsmanagedobject


【解决方案1】:

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

看看this answer

【讨论】:

  • 对,PS:可能可以给它另一个属性给对象,或者当你尝试查询(执行)它时你必须想办法。
  • 是的,你是对的。所以我想知道,什么时候将一对多关系定义为有序的?知道它将在 fetch 中排序。
【解决方案2】:

这里有几个误解:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多