我理解如何使用核心数据,但我最困惑的是保存数据。当他们按下主页按钮?在应用程序崩溃的情况下进行每次互动?
答案 0 :(得分:5)
保存数据是一个单独调用的原因是,您可以批量处理包含较大操作的多个较小更改并一次保存所有更改,而不是在整个过程中保存每个步骤。
您应该在每次原子操作之后保存数据,并且永远不会将提交的数据仅存储在内存中任何重要的时间段。
每次用户提交数据更改时,他们都会希望下次运行应用时数据就在那里,所以确保它在那里是你的工作。
用户提交数据更改后,您的应用可能会等待用户做其他事情,因此在用户决定下一步做什么时保存数据。
如果您等待applicationDidEnterBackground
中的数据保存,则无法保证它会被调用。
显然,并非所有数据都是关键的,例如,用户在表单上输入但尚未提交的数据并不重要。但是,任何提交的数据都很重要。
答案 1 :(得分:0)
我认为保存每次互动都不是一个好主意(老实说,你的应用程序不应该在“每个”交互中崩溃;))。 我只保存在我的应用程序中
- (void)applicationDidEnterBackground:(UIApplication *)application
事实上你对崩溃是对的。但是如果无效数据导致崩溃怎么办?因此,您将在最坏的情况下重新加载数据,以便每次都崩溃。
但说实话,这只是一个有根据的猜测 - 我认为这取决于你的数据/应用程序的敏感程度
编辑:此答案提供了类似的意见Saving Core Data Context before Crashing
但是我错过了一个非常好的观点:
只要用户执行关键操作,您就应该保存
答案 2 :(得分:0)
如果你在后台保存,你可以经常这样做而不会损害UX。请记住,您可能需要更新UI并且会产生影响(保存到main后合并将在主线程上完成)。
让你保存小(少量的物体),以免停止主线程
它非常依赖于您的CoreData堆栈架构
您将希望节省关键时刻,例如输入背景或用户重要数据/需求。