swift - 自引用实体,为了与 NSFetchedResultsController 建立父子关系

标签 swift core-data nsfetchedresultscontroller nssortdescriptor

所以我有一个自引用的一对多关系,标签:

Tag
- Name: String
- Order: NSNumber
- SubTags: [Tag]
- ParentTag: Tag

一个标签可以有多个子标签并且只能有一个父标签

我的目标是使用 NSFetchedResultsController 以这种方式在 UITableView 中显示它们(其中每个标签都是一个单元格,我使用空格向父级显示层次结构):

Parent Tag, order 1
 Child Tag, order 1
 Child 2 Tag order 2
Parent 2 Tag, order 2
 Child 3 Tag, order 1
 Child 4 Tag, order 2

这可能吗?我是否应该以不同的方式存储和计算订单键,以便我可以按此直接订购?

这几天我一直在绞尽脑汁,欢迎任何建议:o)

最佳答案

是的,你应该。就目前而言,要使用 FRC,您需要一个方法来对所有实体实例进行排序,但您不能使用关系顺序。您可以通过以下方式执行此操作:

  1. 添加子项时,获取其父级订单
  2. 获取 child 的 sibling 数 3 设置 child 的顺序为'parent.siblings'

所以你会有一个层次结构并排序如下:

Parent 1 Tag, order 1
 Child 1 Tag, order 1.1
 Child 2 Tag, order 1.2
Parent 2 Tag, order 2
 Child 3 Tag, order 2.1
 Child 4 Tag, order 2.2
  Child 5 Tag, order 2.2.1

您可以通过计算顺序中的点数来判断深度,但最好将深度数字存储在子节点上,或者至少将该深度存储为 transient 并通过计算父节点来计算。

关于swift - 自引用实体,为了与 NSFetchedResultsController 建立父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311789/

相关文章:

swift - didSet for weak reference 没有按预期工作

core-data - 核心数据异常 : SQLite "no such column" error after adding a new attribute to an entity

ios - 重新加载 fetchedResultsController 数据

ios - 在NSFetchedResultsController中标识数组的数组

ios - 在 iOS (Swift) 中无法正确显示 Stack View 中的 View

ios - swift - 如何适合 GMSMapView(谷歌地图)以显示所有标记并防止过度缩放

ios - 暂停时调用 UIViewPropertyAnimator 完成

iphone - Restkit 核心数据与 NSManagedObjectContext 集成

ios - XCTest 与核心数据

core-data - 带有从核心数据中获取的部分的 SwiftUI 列表