我正在使用NSFetchedResultsController为我的UITableView实现KVO(这很明显)。我不知道的是,如何同时使用多个实体(某种树状结构)。

这是我的设置:

  • 实体1
  • DisplayName
  • RelationToEntity2
  • Entity2
  • DisplayName

  • 现在,我可以获取要显示的任何一个的数据-到目前为止,一切都很好。我想要的是具有以下结构的单节式TableView(如展平 View ):
  • 实体1(条目1)
  • Entity2(条目1)
  • Entity2(条目2)
  • 实体1(条目2)

  • 虽然看起来像是通过节来完成的事情,但事实并非如此。两个实体都应该是一个UITableViewCells。有人可以给我指出正确的方向,以扁平化而不丢失实际的层次结构。

    最佳答案

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

    NSFetchedResultController告诉您已插入新的Entity1时,您将Entity1及其关联的Entity2插入到_flattenedArray中,所以它看起来像这样:
    [<Entity1>, <related Entity2>, <related Entity2>...]
    插入它们的位置取决于您-几乎可以归结为:

  • 构造一个子数组,其中包含新的Entity1和关联的Entity2对象
  • 决定在_flattenedArray中的何处插入新的子数组。
  • 调用reloadData或其他方式将新数据
  • 通知tableView
    删除Entity1对象后,请将其和所有后续的Entity2对象删除,直到遇到_flattenedArray的结尾或遇到另一个Entity1对象。这假定Entity2绝不是“顶级”对象。如果是,则只需要删除关系中的那些Entity2对象。

    Entity1对象获得或丢失Entity2对象时,您可以首先从Entity1中删除_flattenedArray对象,然后重新插入。如果这太有效,请执行合并。

    关于objective-c - NSFetchedResultsController-KVO,UITableView和 "Tree",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4747501/

    10-10 20:44