我在我的应用程序中通过核心数据查询客户端NSManagedObject,并将结果显示在UIView推入我的UINavigationsController堆栈的简单细节中 - 没有任何复杂或异常。
当我从这个客户端对象的详细信息页面导航回来时,我也在后台检查我的客户端的更新,如果有的话,我会在不同的托管对象上下文的后台线程中安静地更新我的数据存储。这是有效的,我看到数据的更改通过我的SQLite数据库浏览器出现在我的Core Data存储中,所以我知道数据已经更新。
问题是,当我导航回同一个客户端时,我不会看到更改,除非我完全关闭我的应用程序或选择其他客户端,然后返回到我知道已更改的客户端。似乎我的托管对象上下文缓存了最后一个Client对象获取请求。
如何防止这种情况发生?
答案 0 :(得分:2)
您需要注册NSManagedObjectContextDidSaveNotification
传递后台NSManagedObjectContext
作为对象,然后在主线程上的mergeChangesFromContextDidSaveNotification:
上触发通知时调用NSManagedObjectContext
。
这在Core Data Programming Guide: Concurrency with Core Data中指定。并且不要忘记刷新视图中的数据(如果是表视图调用reloadData
)
答案 1 :(得分:0)
这可能是一个过于简单的解决方案,但您是否在 viewWillAppear:中重新加载数据?
- (void)viewWillAppear
{
[self.tableview reloadData];
}