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

时间:2016-01-28 18:01:23

标签: ios swift core-data nsmanagedobject

我正在使用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有一个本地var,用于保存选定的联系人。

现在出现问题。当对应用程序中其他位置的特定Contact对象进行更改并保存到托管对象上下文时,ChatViewController的本地contact var无法准确反映更改。 NSManagedObject的更改是否会反映在该对象的本地变量中?如果没有,我如何强制var更新,以便它反映当前保存的值?

1 个答案:

答案 0 :(得分:1)

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

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