所以我有一个自引用的一对多关系,标签:
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,您需要一个方法来对所有实体实例进行排序,但您不能使用关系顺序。您可以通过以下方式执行此操作:
- 添加子项时,获取其父级订单
- 获取 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/