【问题标题】:CoreData - when do I save?CoreData - 我什么时候保存?
【发布时间】:2013-04-05 14:09:58
【问题描述】:

我了解如何使用 CoreData,但我很困惑何时最好保存数据。当他们按下主页按钮时?在应用崩溃的情况下每次交互?

【问题讨论】:

  • 这取决于您如何定义interaction。如果交互是一个有用的工作单元 - 手动创建/编辑记录或实体,那么是的,我会在那之后保存

标签: ios objective-c ios5 core-data ios6


【解决方案1】:

保存数据是一个单独的调用的原因是,您可以批量处理多个较小的更改,这些更改包含一个较大的操作并一次保存,而不是在沿途的每个步骤中保存。

您应该在每次原子操作之后保存数据,并且永远不要让提交的数据在任何重要的时间段内仅位于内存中。

每次用户提交对数据的更改时,他们都希望下次运行应用时数据会存在,因此您的工作就是确保数据存在。

在您的用户提交对数据的更改后,您的应用可能会等待用户执行其他操作,因此请在用户决定下一步做什么时保存数据。

如果您等待在applicationDidEnterBackground 中保存数据,则无法保证它会被调用。

显然,并非所有数据都至关重要,例如,用户在表单中输入但尚未提交的数据并不重要。但是,任何提交的数据都是至关重要的。

【讨论】:

    【解决方案2】:

    我认为保存每次交互并不是一个好主意(老实说,您的应用程序不应该能够在“每次”交互时崩溃;))。 我只保存在我的应用中

    - (void)applicationDidEnterBackground:(UIApplication *)application
    

    事实上,您对崩溃的看法是正确的。但是如果无效数据导致崩溃怎么办?因此,您将在最坏的情况下重新加载数据,使其每次都崩溃。

    但老实说,这只是一个有根据的猜测 - 我认为这取决于您的数据/应用程序的敏感程度

    编辑:这个答案提供了类似的意见Saving Core Data Context before Crashing

    但是我错过了一个非常好的观点:

    您应该在用户执行关键操作时保存

    【讨论】:

      【解决方案3】:

      如果您在后台保存,您可以经常这样做,而不会对用户体验造成太大影响。请记住,您可能需要更新 UI,这会产生影响(保存到主线程后合并将在主线程上完成)。
      让您节省少量(少量对象),以免停止主线程。
      它非常依赖于您的 CoreData 堆栈架构。
      您将希望节省进入后台或用户重要数据/需求等关键时刻。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多