有没有人有一个例子来说明如何有效地为 UITableView 提供来自核心数据模型的数据,最好包括使用部分(通过引用的属性),而不使用 NSFetchedResultsController?
在 NSFetchedResultsController 可用之前这是如何完成的?理想情况下,样本应该只获取正在查看的数据,并在必要时提出额外的请求。
谢谢,
蒂姆
有没有人有一个例子来说明如何有效地为 UITableView 提供来自核心数据模型的数据,最好包括使用部分(通过引用的属性),而不使用 NSFetchedResultsController?
在 NSFetchedResultsController 可用之前这是如何完成的?理想情况下,样本应该只获取正在查看的数据,并在必要时提出额外的请求。
谢谢,
蒂姆
作为记录,我同意 CommaToast 的观点,即实施替代版本的NSFetchedResultsController
. 事实上,我想不出我会提倡这样做的场合。
话虽如此,出于教育的目的,我想:
NSFetchedResultsController
运行相关NSFetchRequest
以创建初始结果集;NSManagedObjectContextObjectsDidChangeNotification
从托管对象上下文中侦听。收到该通知后,它会更新其结果集。获取请求位于谓词之上,并且谓词不能总是分解为它们引用的键(例如,如果您创建一个 via predicateWithBlock:
)。此外,尽管插入和删除的列表非常明确,但已更改对象的列表并未提供有关这些对象如何更改的线索。所以我想它只是针对更改和插入记录的组合集重新运行 fetch 请求中提供的谓词,然后适当地累积结果,从删除的集中删除它之前考虑过的任何结果。
每当处理具有获取限制的获取请求时,您可能可以做更有效的事情。明显的观察结果,直接从我的脑海中浮现:
逻辑扩展似乎是,只有当您出现在删除、插入和更改修改您的排序列表的位置时,您才需要重新询问托管对象上下文,以便 - 在将其削减到给定的获取限制之前 -底部的对象不是您上次拥有的对象。原因是您对未持有的存储对象与插入和修改一无所知;你只知道那些你没有持有的人与你以前拥有的人相比如何。