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 - 我啥时候保存?的主要内容,如果未能解决你的问题,请参考以下文章