【发布时间】:2017-11-04 05:31:06
【问题描述】:
这个问题的阶段性不好,但这可以在代码中更好地解释。
我们有一个核心数据堆栈,其中包含 Marcus Zarra 在此处定义的私有和主要上下文:http://martiancraft.com/blog/2015/03/core-data-stack/
我们调用一个单独的类来执行获取请求(主上下文)并返回一个 NSManagedObjects 数组:
NSArray *ourManagedObjects = [[Client sharedClient].coreDataManager fetchArrayForClass:[OurObject class] sortKey:@"name" ascending:YES];
然后我们进行一些处理并存储一个引用:
self.ourObjects = processedManagedObjects
我们的视图包含一个 UITableView,这些数据用于填充它,效果很好。
我们更改 CMS 上的数据,在 UITableView 上拉动以刷新以触发同步(私有上下文),然后调用相同的函数来检索更新的数据。但是,即使当我直接检查 sqlite db 时,提取请求返回的数据与以前完全相同,但它包含新数据。要显示新值,我必须重新加载应用程序。
我发现如果我不将已处理的ManagedObjects 分配给self,则获取请求确实会返回正确的数据,因此看起来持有对NSManagedObject 的引用会阻止它从主上下文获取新数据。但是我不知道为什么会这样。
澄清一下,我们很确定我们的核心数据堆栈没有任何问题,即使这些托管对象没有被更新,其他的都在正常更新,只是我们存储本地引用的这个。
【问题讨论】:
标签: ios objective-c core-data