CoreData - 我啥时候保存?

Posted

技术标签:

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

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

【问题讨论】:

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

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

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

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

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

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

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

【讨论】:

【参考方案2】:

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

- (void)applicationDidEnterBackground:(UIApplication *)application

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

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

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于CoreData - 我啥时候保存?的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候需要在 Heroku 中使用工作进程

我啥时候应该销毁令牌[关闭]

Cocoa:CoreData - ManagedObjectContext 中的多个实体

我啥在arcgis中打不开已经保存的地图?

将 CoreData 与对象一起使用?

与此上下文的 CoreData SwiftUI 错误不同的 NSManagedObjectModel