NSFetchedResultsController - KVO,UITableView和"树"

gam*_*mma 8 tree objective-c key-value-observing uitableview ios

我正在使用NSFetchedResultsController为我的UITableView实现KVO(很明显).我无法弄清楚的是,如何使用多个实体 - 一种树形结构 - 同时存在(ed).

这是我的设置:

  • ENTITY1
    • 显示名称
    • RelationToEntity2
  • ENTITY2
    • 显示名称

现在我可以获取要呈现的数据 - 到目前为止一直很好.我想要的是一个具有以下结构的单节TableView(如平面视图):

  • 实体1(条目1)
  • 实体2(条目1)
  • 实体2(第2条)
  • ...
  • 实体1(第2条)
  • ...

虽然它可能看起来像是通过部分完成的事情,但事实并非如此.两个实体都应该是UITableViewCells.有人可以指出我正确的方向来平坦而不会失去实际的等级.

fre*_*ace 1

听起来您需要维护自己的“扁平化”数据源。也许以下方法会起作用:

NSFetchedResultController告诉您Entity1已插入一个新内容时,您将Entity1其及其关联的Entity2s 插入到 say 中,_flattenedArray因此它看起来像这样:

[<Entity1>, <related Entity2>, <related Entity2>...]

将它们插入的位置取决于您 - 基本上可以归结为:

  1. 构造一个包含新对象Entity1和关联Entity2对象的子数组
  2. 决定在哪里_flattenedArray插入新的子数组。
  3. 致电reloadData或其他方式告知tableView新数据

当一个Entity1对象被删除时,删除它以及所有后续的Entity2对象,直到遇到另一个对象的末尾_flattenedArray或遇到另一个Entity1对象。这假设Entity2永远不是“顶级”对象。如果是,您只需要删除Entity2关系中的那些对象。

当一个Entity1对象获得或丢失一个Entity2对象时,您可以先删除该Entity1对象,_flattenedArray然后重新插入它。如果这太有效,请改为进行合并。