2014-02-19 140 views
1

我有一个应用程序,通过从json文件导入到sqlitedb中生成一些静态数据,当运行应用程序数据库文件中有数据并正确加载时,我通常去build文件夹“通常在iOS,CoreData,SQLite,文件丢失

/Library/Application Support/iPhone Simulator/7.0.3-64/Applications/ 

和检查sqlite的文件,并验证它确实有数据。 现在我复制相同的文件夹并将其粘贴到桌面上,并在同sqlite的浏览器中打开,并且数据不见了?为什么我不知道!! 我注意到,对于每个sqlite文件都会生成一个-shm和-wal文件。

这是怎么发生的?

好了,所以我试着一点点的调查,我有两个方案:

1:我把一个破发点的权利后,我完成产生SQLite的文件,然后去build文件夹,在生成文件夹数据库中有数据,如果我将该文件复制到桌面,数据库会丢失其数据。

2:我不会放一个断点,让应用程序正常完成(优雅地),然后进入build文件夹,db文件有数据,当我将它复制并粘贴到桌面时,它仍然保留数据。

所以我认为当我放置断点时xcode退出(或应用程序正常关闭)时会发生某些事情,我错过了它!

回答

2

从iOS 7开始,sqlite数据库默认使用日志记录模式 - 这意味着对数据库的所有更改都写入“更新文件”,而不是直接写入数据库。

Core Data and iOS 7: Different behavior of persistent store

:看看这里为一个完整的解释 - 你可以改变行为,回到“旧”的方式