【问题标题】:When to explicitly save with CoreData in iOS?何时在 iOS 中使用 CoreData 显式保存?
【发布时间】:2012-06-16 17:34:51
【问题描述】:

我目前正在为 iPad 开发一个简单的 CoreData 应用程序,但我不确定何时必须明确保存。我知道有自动保存;但是,我觉得我需要明确保存以确保我的程序不会崩溃。以下是该计划的简要概述:

~ 这是一个表单程序,它为用户提供一组文本字段和分段控件以供填写。 (想想一个人填写调查,或回答有关他们的姓名、年龄等问题)。

~ 可以填写任意数量的这些字段。它们都不是强制性的。

~ 用户可以随时保存和加载他们的表单,他们可以同时保存多个不同的表单。他们可以删除他们保存的文档

~我目前正在使用核心数据存储这些数据,其中一个实体对象代表一个表单。此实体对象包含用户已完成的所有字段的列表以及他们对每个字段的响应。

~ 我也有这个实体对象的 NSManagedObject 子类。因此,每次填写一个字段时,我都会执行currentForm.name = textfield.text 之类的操作。

好的,所以我的问题是,我什么时候必须明确保存?如果我编写诸如currentForm.name = textfield.text 之类的代码,核心数据是否会立即保存,或者我是否必须明确告诉它这样做(假设我不想等待自动保存)?还有其他时候我可能需要保存吗?删除存储的文档后是否需要保存?

谢谢!

【问题讨论】:

    标签: iphone objective-c ios xcode core-data


    【解决方案1】:

    我还没有听说过 Core Data 自动保存?每当您想保留数据时,都应该在 NSManagedObjectContext 上调用 save 。这是另一个与您类似的问题:Auto-save with Cocoa and Core Data

    【讨论】:

      【解决方案2】:

      因此,没有“自动保存”,碰巧Apple 设置的Core Data 模板包含一个在应用程序关闭时的保存例程,这更像是一个故障保险,以确保您的用户不会丢失任何数据。

      每当您的用户明确保存某些内容或您认为有必要时,您都应该调用 save。

      我会在用户填写完表单后调用 save。

      currentNotification.name = textfield.text 核心数据是立即保存还是我必须明确告诉它这样做(假设我不想等待自动保存)?

      不,更改将在您的 NSManagedObjectContext 中进行,但在该上下文上显式调用 save 之前,数据不会持久保存到您的持久存储中。

      【讨论】:

        【解决方案3】:

        以下是您的保存方式

        NSError *error;
        
            if (![[AppDelegate managedObjectContext] save:&error]) 
        {
                NSLog(@"there was an error in Save:%@",error);
            }
        

        我会“尽早且经常”保存,或者至少在通知中保存 didEnterBackground

        【讨论】:

        • 所以如果我写下面这行:currentForm.name = textfield.text 那么你会建议我明确保存吗?
        • 是的,为实体创建一个插入新对象对于核心数据来说是微不足道的,特别是如果该对象是一个字符串。它不会减慢你正在做的任何事情。
        • 我不建议在用户每次输入后保存,您的上下文有点像交易。您可以在用户取消更改时回滚更改,也可以在用户说他们完成更改时提交更改。
        猜你喜欢
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多