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

Self Referencing Entity, order to parent-child relationship with NSFetchedResultsController

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

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. 添加 child 时,获取其 parent 顺序
  2. 获取child的兄弟姐妹数 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

您可以通过计算顺序中的点数来判断深度,但最好将深度数字存储在 child 上,或者至少将该深度存储为瞬态并通过计数来计算parents.