我在我的应用程序中使用Core Data,并发现了模拟器的一些奇怪的行为:当我在我的应用程序中向Core Data添加一些数据并使用XCode中的“stop”按钮退出模拟器时(或者只是按下Cmd-Q )立即,下次启动模拟器时数据不会存储在数据库中。经过一些测试,我发现数据存储在磁盘上:
调用[NSManagedObjectContext save:]无效。行为是一样的。
所以我的问题是:这种行为的原因是什么?在退出之前有没有办法强制刷新到磁盘?在设备上运行时,我是否有以这种方式丢失数据的风险(个人而言,除了强制关闭之外我没有看到任何数据,但奇怪的行为让我感到烦恼)
答案 0 :(得分:9)
使用Xcode中的停止按钮停止模拟器可能与使用锤子粉碎iPhone(但保留SSD)相同。基本上,你的应用程序和其他一切都停止了。当发生这种情况时,没有合理的方法来确保数据被保存。
答案 1 :(得分:7)
你可能正在使用嵌套的上下文。如果您的上下文具有父上下文,则调用-save:
将只保存到该上下文,而不是文件系统。
嵌套上下文(通常)用于安全地在后台队列上使用上下文,并允许前台上下文保存,而不必承担保存到文件系统的开销。保存到文件系统将在后台队列上进行,而不是阻塞主线程。
答案 2 :(得分:0)
我也一直在努力解决这个问题,Daniel Eggert在上面(2)中的回答是我在互联网上找到的第一个也是唯一有用的答案。我假设JRV正在使用UIManagedDocument中的NSManagedDocumentContext。如果是这种情况,则Apple的“默认”保存方法不完整!采用了Daniel Eggert的解决方案后,我的数据现在完全保留,并且也不受模拟器“停止”手势的影响。我建议Daniel Eggert在上面的(2)中给予其他希望在这种情况下编写弹性代码的人。