【问题标题】:UITableView does not reload after data source merging with background NSManagedObjectContext数据源与后台 NSManagedObjectContext 合并后 UITableView 不会重新加载
【发布时间】:2013-08-29 05:57:36
【问题描述】:
在我的视图控制器中,我有一个使用NSFetchedesultsController 作为数据源的表视图。而且我必须在后台线程中使用另一个NSManagedContext 实例从服务器加载数据。在将前台上下文与后台上下文合并后,我需要在表视图中反映更改,以便我重置NSFetchedResultsController(这样它将再次获取新到达的数据),然后重新加载表视图。
很奇怪,我的表格视图似乎直到几秒钟后才重新加载(有时更长)。而且我确信这不是因为获取,因为当我滚动表格视图时,新数据会立即出现。
任何建议如何解决这个问题?
提前致谢!
【问题讨论】:
标签:
ios
iphone
cocoa-touch
core-data
【解决方案1】:
获取数据并创建托管对象后,您需要立即保存背景上下文,这些对象将合并到父上下文中,您可以仔细检查对父上下文所做的任何更改
[上下文 hasChange] [上下文更新对象]
[上下文插入对象]
保存的对象仍在内存中,您需要重置背景上下文清除它们
【解决方案2】:
结果是我不明白通知回调函数在哪里被调用。我在 NSManagedObjectContextDidSaveNotification 回调函数中重新加载我的表视图。当我检查它在这个函数中的哪个线程时,我发现它在我假设的主线程之外的另一个线程上运行。所以我使用 GCD 回到主线程并解决了问题。
【解决方案3】:
保存操作应该在子上下文的私有队列上进行,这样你就不必听通知,嵌套块等待所有事情完成并重新获取。