核心数据更改是不是反映在本地 NSManagedObject 子类变量中?

Posted

技术标签:

【中文标题】核心数据更改是不是反映在本地 NSManagedObject 子类变量中?【英文标题】:Are core data changes reflected in local NSManagedObject subclass vars?核心数据更改是否反映在本地 NSManagedObject 子类变量中? 【发布时间】:2016-01-28 18:01:22 【问题描述】:

我正在使用 NSFetchResultsController 来填充 UITableView。表格视图填充了我的“Contact”NSManagedObject 子类。选择一个表格单元格时,我将所选联系人传递给目标视图控制器:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == kChatSegue 
        if let controller = segue.destinationViewController as? ChatViewController 
            if let theSelectedContact = self.selectedContact 
                controller.contact = theSelectedContact
            
        
    

从上面的代码可以看出,ChatViewController 有一个本地变量来保存选定的联系人。

现在解决问题。当在应用程序的其他地方对特定的联系人对象进行更改并将其保存到托管对象上下文时,这些更改不会准确地反映在 ChatViewController 的本地 contact var 中。对 NSManagedObject 的更改会反映在该对象的本地变量中吗?如果没有,如何强制 var 更新以反映当前保存的值?

【问题讨论】:

【参考方案1】:

托管对象不会自动反映对底层持久存储所做的更改。获取后,它们会保持其状态,直到您更改它为止。这通常是一件好事——例如,您不希望未保存的更改被意外清除。

如果您想强制一个副本加载在别处所做的更改,请在您的NSManagedObjectContext 上使用refreshObject(:,mergeChanges:),并将第二个参数设置为true。这将告诉上下文重新加载对象的数据以反映当前保存的状态。您可以观察NSManagedObjectContextDidSaveNotification 以了解何时可能需要加载更改。

【讨论】:

以上是关于核心数据更改是不是反映在本地 NSManagedObject 子类变量中?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云功能本地代码更改未反映在模拟器中

项目不会反映本地主机上的更改

未反映在本地化故事板中的基本故事板更改

React 源代码更改未反映在浏览器 DOM 中

核心数据与 Ensembles 同步:在本地模型更改之前,不会拉下远程更改

访问核心数据实体的 NSString 属性