使用两个NSFetchedResultsController从Core Data中获取大量数据

时间:2013-02-15 14:04:49

标签: uitableview core-data fetch nsfetchedresultscontroller prefetch

我正在尝试使用NSFetchedResultsController在UITableView中从CoreData获取10000记录并尝试使其尽可能快(因为请求有一个排序描述符,它需要更长的时间来获取这些数据)。

我正在尝试使用第一个和主要的NSFetchedResultsController(在表的委托方法中使用)从CoreData获取100条记录,这是在桌面上显示的,而在另一个队列中,我在viewDidAppear中启动了另一个对auxiliarFRC上的所有10000条记录的提取。在AuxFRC中的提取结束后,我将主要FRC分配给AuxFRC,以便传输所有记录并重新加载表。

我的问题是UITableView卡在第一个加载的行,直到AuxFRC结束提取,即使我调度performFetch,我也无法理解为什么会发生这种情况,或者如果这种方式错误,可以使用其他方式获取10000记录并在数据发生变化时保持最新状态?

2 个答案:

答案 0 :(得分:1)

我猜问题是NSManagedObjectContext - 这不是线程安全的,我对两个提取使用了相同的一个。我创建了原始副本并在第二个上下文中更改了AuxFRC。这解决了一切。

答案 1 :(得分:0)

诀窍是使用FRC的缓存机制并使用显示线程协调异步提取

所有内容都在this回答中进行了总结。