Core data 以老式方式提供UITableView核心数据

Core data 以老式方式提供UITableView核心数据,core-data,uitableview,nsfetchedresultscontroller,Core Data,Uitableview,Nsfetchedresultscontroller,有没有人举过一个例子,说明如何有效地为UITableView提供来自核心数据模型的数据,最好包括使用节(通过引用的属性),而不使用NSFetchedResultsController 在NSFetchedResultsController可用之前是如何实现的?理想情况下,示例应该只获取正在查看的数据,并在必要时发出额外请求 谢谢 Tim为了记录在案,我同意CommaToast的观点,即实施替代版本的NSFetchedResultsController的理由最多也很有限。事实上,我想不出有什么场合

有没有人举过一个例子,说明如何有效地为UITableView提供来自核心数据模型的数据,最好包括使用节(通过引用的属性),而不使用NSFetchedResultsController

在NSFetchedResultsController可用之前是如何实现的?理想情况下,示例应该只获取正在查看的数据,并在必要时发出额外请求

谢谢


Tim

为了记录在案,我同意CommaToast的观点,即实施替代版本的
NSFetchedResultsController
的理由最多也很有限。事实上,我想不出有什么场合我会提倡这样做

也就是说,为了教育的目的,我想:

  • 创建时,
    NSFetchedResultsController
    针对托管对象上下文运行相关的
    NSFetchRequest
    ,以创建初始结果集
  • 随后-如果它有委托-它将侦听托管对象上下文中的
    nsManagedObjectContextObjectsIDChangeNotification
    。收到该通知后,它将更新其结果集
Fetch请求位于谓词之上,谓词不能总是分解为它们引用的键(例如,如果通过
predicateWithBlock:
创建一个键)。此外,尽管插入和删除的列表非常明确,但更改对象的列表并不能提供这些对象如何更改的线索。因此,我想它只是重新运行在取回请求中提供的谓词,用于组合的更改和插入的记录集,然后适当地累积结果,从删除的集合中删除任何以前考虑过的结果。

在处理具有提取限制的提取请求时,您可能可以执行更有效的操作。显而易见的观察结果,就在我的头顶上:

  • 如果您已经有足够的对象,没有一个对象被删除或修改,并且没有一个新插入或修改的对象的排序位置高于您拥有的对象,那么显然没有要传播的更改,并且您不需要运行新的查询
  • 即使您丢失了一些您拥有的对象,如果您保留了最低的对象,那么对于所有未更改的对象,您都有一个上限。因此,如果更改和插入的对象与您已经拥有的对象加在一起,那么您也可以避免新的查询

逻辑扩展似乎是,只有当删除、插入和更改修改了排序列表时,才需要重新询问托管对象上下文,以便在将其切碎到给定的获取限制之前,底部对象不是上次的对象。其理由是,相对于插入和修改,您还不知道关于您没有掌握的存储对象的任何信息;你只知道那些你没有掌握的与你以前掌握的相比是如何的。

我敢问你为什么要避免使用NSFetchedResultsController吗?我可以从您的斜体字“高效”推断,您可能会觉得NSFetchedResultsController在某种程度上似乎效率低下。请解释?我希望看到一个与NSFetchedResultsController相同的高效示例(即仅获取所需的行),但是,我不能使用NSFetchedResultsController,因为我需要通过插入与数据模型无关的额外行来伪造结果…您可以将获取的结果数组复制到NSMutableArray,然后在需要的地方插入伪造的值,不是吗?您好。谢谢你的回答,你应该为此打勾:)特别是我遇到的问题是需要支持空部分;NSFetchedResultsController根本做不到的事情。从那时起,我编写了自己的子类来修补这个特性——如果您感兴趣,可以在GitHub上使用TaFetchedResultsController。