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

Are core data changes reflected in local NSManagedObject subclass vars?

我正在使用 NSFetchResultsController 填充 UITableView。 table 视图填充了我的 "Contact" NSManagedObject 子类。选择 table 个单元格之一后,我将选定的联系人传递到目标视图控制器:

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 以反映当前保存的值?

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

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