在显示核心数据获取请求之前修改它们的结果

时间:2013-02-27 17:53:53

标签: objective-c uitableview core-data random nsfetchedresultscontroller

我有一个应用程序,它使用Core Data从数据库中提取数据,并通过UITableView将其显示在NSFetchedResultsController的自定义单元格中。我想时不时地随机插入一个不同类型的自定义单元格(例如,在每10到20个单元格之间),这将不会从同一个数据库中获取其数据,并且将是{{1}的不同子类}。

我对UITableViewCellNSFetchedResultsController数据源方法的中间方式感到有点困惑。我有各种选项,允许对所引入的数据进行排序,过滤等,所以我不能依赖使用indexPath或类似的东西。

做这样的事情的最佳方法是什么?我知道我可以访问UITableView的{​​{1}} - 正在复制和修改正确的前进方向吗?比如创建fetchedObjects,并使用该数组的内容提供所有Data Source和Delegate方法?

有没有更好的方式/有替代方法吗?我需要能够保留从数据库中对数据进行排序/修改/过滤的能力,同时始终将这些间质细胞保持在每10到20个单元格之间的相同间隔。

1 个答案:

答案 0 :(得分:1)

我会考虑以下三种操作之一:

A:将对象插入到数据库中,与其他数据一起拉出,但具有足以区分它们的属性以显示UITableViewCell的不同子类。可能是最简单的出路,除非你有一个非常困难的数据模型。

B:如果您可以使用sectionNameKeyPath上的NSFetchedResultsController - 属性将数据存储中的数据分组,请转到NSFetchedResultsController + UITableViewDataSource - 方法,然后在[[self.fetchedResultsController sections] count] + numberOfInterstitialCells;内返回numberOfSectionsInTableView:

cellForRowAtIndexPath中,您需要覆盖indexpath中的section-info,以便在FetchedResultscontroller和插页式细胞之间切换正确的对象。这可能是一种繁琐且困难的方法,但是如果你使用parentContexts在iOS6上,那么实现NSFetchedResultsControllerDelegate的好处是很棒的

C:在加载视图并使用此数组提供UITableViewDataSource之前,使用正常的fetchrequest获取对象,并将它们放入插入插页式细胞的可变数组中。和选项A一样简单,但是你不会得到NSFetchedResults-Controller的好处。