繁体   English   中英

NSFetchedResultsController-KVO,UITableView和“树”

[英]NSFetchedResultsController - KVO, UITableView and a “Tree”

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

这是我的设置:

  • 实体1
    • 显示名称
    • RelationToEntity2
  • 实体2
    • 显示名称

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

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

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

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

NSFetchedResultController告诉你一个新的Entity1已经插入,可以插入Entity1及其相关Entity2 s转换说, _flattenedArray所以它看起来是这样的:

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

插入它们的位置取决于您-几乎可以归结为:

  1. 构造一个包含新的Entity1和关联的Entity2对象的子Entity2
  2. 决定_flattenedArray中的_flattenedArray插入新的子_flattenedArray
  3. 调用reloadData或其他方式将新数据通知给tableView

删除Entity1对象后,请将其和所有后续Entity2对象删除,直到遇到_flattenedArray或遇到另一个Entity1对象。 这假定Entity2绝不是“顶级”对象。 如果是,则只需要删除关系中的那些Entity2对象。

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

这正是使用实体继承的情况。 使用获取的结果控制器获取父抽象实体时,该表可以显示所有子实体。 使用节顺序属性可以按照您喜欢的顺序显示节。 并使用第二个sort属性在各节中进行排序。 Notes应用程序通过获取一个抽象的Container实体并显示作为子实体的Accounts和Folders来做到这一点。 它按帐户划分,第一个文件夹“ All iCloud”单元实际上是一个帐户。 文件夹与帐户有关系,即使它们在实体继承树中相等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM