我在我的应用程序中使用 Core Data,并发现了模拟器的一些奇怪行为:当我在我的应用程序中向 Core Data 添加一些数据并使用 XCode 中的停止"按钮退出模拟器时(或者只需按 Cmd-Q) 立即,下次我启动模拟器时,数据不会存储在数据库中.经过一些测试,我发现数据存储到磁盘:
I use Core Data in my application, and discovered some odd behavior of the simulator: When I add some data to Core Data in my app and quits the simulator using the "stop" button in XCode (or just press Cmd-Q) immediately, the data is not stored in the database the next time I start the simulator. After some testing, I found out, that the data is stored to disk:
调用 [NSManagedObjectContext save:] 没有帮助.行为是一样的.
It does not help to call [NSManagedObjectContext save:]. The behavior is the same.
所以我的问题是:这种行为的原因是什么?有没有办法在退出之前强制刷新到磁盘?在设备上运行时,我是否有可能以这种方式丢失数据(就我个人而言,我没有看到任何风险,除了强制关闭,但奇怪的行为让我有点困扰)
So my question is: What is the reason for this kind of behavior? Are there any way to force flushing to disk before quitting? And are there any risk that I can loose data this way when running on a device (personally, I do not see any, except a force close, but the odd behavior bothers me a bit)
您可能正在使用嵌套上下文.如果你的上下文有一个父上下文,调用 -save:
只会保存到那个上下文,而不是文件系统.
You're probably using nested context's. If your context has a parent context, calling -save:
will just save to that context, not to the file system.
嵌套上下文(通常)用于安全地使用后台队列上的上下文,并允许保存前台上下文而不必产生保存到文件系统的开销.保存到文件系统将在后台队列中进行,不会阻塞主线程.
Nested context are (usually) used to safely use a context on a background queue, and allowing a foreground context to save without having to incur the overhead of saving to the file system. The save to the file system will happen on a background queue and not block the main thread.
这篇关于Core Data 什么时候刷新到磁盘?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!