Core Data何时刷新到磁盘?

JRV*_*JRV 4 core-data objective-c ios5

我在我的应用程序中使用Core Data,并发现了模拟器的一些奇怪的行为:当我在我的应用程序中向Core Data添加一些数据并使用XCode中的"stop"按钮退出模拟器时(或者只是按下Cmd-Q),下次启动模拟器时,数据不会存储在数据库中.经过一些测试,我发现数据存储到磁盘:

  • 如果我按下主页按钮立即.(差不多-这可能的退出应用程序之前,数据存储,如果退出非常快.)
  • 如果我在添加数据后让应用程序运行一段时间(至少约20秒).

调用[NSManagedObjectContext save:]无效.行为是一样的.

所以我的问题是:这种行为的原因是什么?在退出之前有没有办法强制刷新到磁盘?当在设备上运行时,我是否有以这种方式丢失数据的风险(个人而言,我没有看到任何,除了强制关闭,但奇怪的行为困扰我一点)

Jer*_*myP 9

使用Xcode中的停止按钮停止模拟器可能与使用锤子粉碎iPhone(但保留SSD)相同.基本上,你的应用程序和其他一切都停止了.没有合理的方法可以确保在发生这种情况时保存数据.


Dan*_*ert 7

您可能正在使用嵌套上下文.如果您的上下文具有父上下文,则调用-save:将仅保存到该上下文,而不是文件系统.

嵌套上下文(通常)用于安全地在后台队列上使用上下文,并允许前台上下文保存而不必承担保存到文件系统的开销.保存到文件系统将在后台队列上进行,而不是阻塞主线程.

  • 你必须*不*在非线程安全的`context`上调用`[[context parentContext] save:&error]`(正如我所指出的).你需要调用`[[context parentContext] performBlock:^(){[[context parentContext] save:NULL]}];`(或类似的东西) (3认同)