更新核心数据的正确方法

Correct way to update Core Data

我正在尝试在按下按钮时更新我的​​核心数据堆栈。当应用程序在一个会话中 运行 时一切看起来都很好,但是当我重新启动应用程序时,我所做的更新不再存在。

我的代码如下所示:

if let indexPath = self.tv.indexPathForRowAtPoint(point){
    let data = messageList[indexPath.row] as Messages
    if data.read == true{
        println("Message already read")
    }else{
        data.read = true
    }
 }

为什么会这样?当我的应用程序重新启动时,更改总是被还原。

您必须确保在 NSManagedObjectContext 实例上调用 save。至少应该在 AppDelegate 中定义了 on call,但您可能希望更频繁地调用它,例如当您的应用进入后台或类似情况时。

如需进一步参考,请查看 iOS Core Data when to save context?

您需要在关闭应用程序之前保存 NSManagedObjectContext。

例如: AppDelegate.swift

func applicationWillTerminate(application: UIApplication) {
    self.saveContext()
}

这只有在您终止该应用程序后才有效。

但是如果你想在 NSManagedObject 的任何更改后保存上下文,你需要调用 mangedObjectContext.save(&error)