数据源与后台NSManagedObjectContext合并后,UITableView不会重新加载

时间:2013-08-29 05:57:36

标签: ios iphone cocoa-touch core-data

在我的视图控制器中,我有一个使用NSFetchedesultsController作为数据源的表视图。我必须使用后台线程中的另一个NSManagedContext实例从服务器加载数据。在将前景上下文与后台上下文合并之后,我需要在表视图中反映更改,以便重置NSFetchedResultsController(以便它将再次获取新到达的数据),然后重新加载表视图。

很奇怪,似乎我的桌面视图在几秒钟后才重新加载(有时候会更长)。我确信这不是因为提取,因为当我滚动表格视图时,新数据会立即出现。

有任何建议如何解决这个问题?

提前致谢!

3 个答案:

答案 0 :(得分:1)

获取数据并创建托管对象后,您需要立即保存背景上下文,这些对象将合并到父上下文中,您可以仔细检查对父上下文所做的任何更改 [Context hasChange] [context updatedObjects]  [context insertedobjects] 保存的对象仍在内存中,您需要重置背景上下文清除它们

答案 1 :(得分:1)

我发现原因是我无法理解调用通知回调函数的位置。我在NSManagedObjectContextDidSaveNotification回调函数中重新加载我的表视图。当我在这个函数中检查它所在的线程时,我发现它运行在我假设的主线程之外的另一个线程上。所以我使用GCD重新开始主线程并解决了问题。

答案 2 :(得分:0)

应该在子上下文的私有队列上进行保存操作,因此您不必监听通知,嵌套块等待所有操作完成并重新获取。