[英]NSFetchedResultsController - KVO, UITableView and a “Tree”
我正在使用NSFetchedResultsController为我的UITableView实现KVO(这很明显)。 我不知道的是,如何同时使用多个实体(某种树状结构)。
这是我的设置:
现在,我可以获取要显示的任何一个的数据-到目前为止,一切都很好。 我想要的是具有以下结构的单节式TableView(如展平视图):
尽管看起来像是通过节来完成的事情,但事实并非如此。 两个实体都应该是UITableViewCells。 有人可以给我指出正确的方向,以扁平化而不丢失实际的层次结构。
听起来您需要维护自己的“扁平化”数据源。 也许以下方法会起作用:
当NSFetchedResultController
告诉你一个新的Entity1
已经插入,可以插入Entity1
及其相关Entity2
s转换说, _flattenedArray
所以它看起来是这样的:
[<Entity1>, <related Entity2>, <related Entity2>...]
插入它们的位置取决于您-几乎可以归结为:
Entity1
和关联的Entity2
对象的子Entity2
_flattenedArray
中的_flattenedArray
插入新的子_flattenedArray
。 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.