在我的视图控制器中,我有一个使用NSFetchedesultsController
作为数据源的表视图。我必须使用后台线程中的另一个NSManagedContext
实例从服务器加载数据。在将前景上下文与后台上下文合并之后,我需要在表视图中反映更改,以便重置NSFetchedResultsController
(以便它将再次获取新到达的数据),然后重新加载表视图。
很奇怪,似乎我的桌面视图在几秒钟后才重新加载(有时候会更长)。我确信这不是因为提取,因为当我滚动表格视图时,新数据会立即出现。
有任何建议如何解决这个问题?
提前致谢!
答案 0 :(得分:1)
获取数据并创建托管对象后,您需要立即保存背景上下文,这些对象将合并到父上下文中,您可以仔细检查对父上下文所做的任何更改 [Context hasChange] [context updatedObjects] [context insertedobjects] 保存的对象仍在内存中,您需要重置背景上下文清除它们
答案 1 :(得分:1)
我发现原因是我无法理解调用通知回调函数的位置。我在NSManagedObjectContextDidSaveNotification回调函数中重新加载我的表视图。当我在这个函数中检查它所在的线程时,我发现它运行在我假设的主线程之外的另一个线程上。所以我使用GCD重新开始主线程并解决了问题。
答案 2 :(得分:0)
应该在子上下文的私有队列上进行保存操作,因此您不必监听通知,嵌套块等待所有操作完成并重新获取。