我正在尝试使用NSFetchedResultsController在UITableView中从CoreData获取10000记录并尝试使其尽可能快(因为请求有一个排序描述符,它需要更长的时间来获取这些数据)。
我正在尝试使用第一个和主要的NSFetchedResultsController(在表的委托方法中使用)从CoreData获取100条记录,这是在桌面上显示的,而在另一个队列中,我在viewDidAppear中启动了另一个对auxiliarFRC上的所有10000条记录的提取。在AuxFRC中的提取结束后,我将主要FRC分配给AuxFRC,以便传输所有记录并重新加载表。
我的问题是UITableView卡在第一个加载的行,直到AuxFRC结束提取,即使我调度performFetch,我也无法理解为什么会发生这种情况,或者如果这种方式错误,可以使用其他方式获取10000记录并在数据发生变化时保持最新状态?
答案 0 :(得分:1)
我猜问题是NSManagedObjectContext - 这不是线程安全的,我对两个提取使用了相同的一个。我创建了原始副本并在第二个上下文中更改了AuxFRC。这解决了一切。
答案 1 :(得分:0)
诀窍是使用FRC的缓存机制并使用显示线程协调异步提取。
所有内容都在this回答中进行了总结。