使用MagicalRecord预填充数据库(swift)。但是,创建了-wal日志,数据未复制到数据库

时间:2014-10-21 23:59:05

标签: magicalrecord

(原谅我,因为我不习惯在这里发帖。会尽我所能)

我正在开发一个将使用预先填充的数据库的iOS应用程序。在我的工作区中,我有一个iOS应用程序项目和一个单独的命令行工具项目来填充数据库。我从" / Library / Application Support"中拖出了数据库文件。文件夹进入我的iOS项目(不使用"如果需要复制项目")。因此,当数据发生变化或需要额外数据时,我可以运行命令行工具来预先填充数据。从那里我将从模拟器中删除应用程序并做一个干净的。当我运行应用程序时,我认为一切都会好的。

这让我发疯的时间最长,但有时候,在我删除应用程序,清理项目然后运行后,我看不到所反映的变化。我运行命令行工具预先填充数据库后,我必须打开数据库文件,我必须使用Base,SQLiteStudio或Firefox的sqlite插件打开数据库文件。一旦我这样做,它似乎工作。

当我查看finder时,我确实看到了.sqlite,sqlite-shm和sqlite-wal文件。在打开数据库文件之前,我发现wal文件是最大的(现在它是2mb)。一旦我使用Base打开文件,然后关闭它,sqlite文件现在是2mb。

当命令行即将完成时,我已尝试在文件(vacuum,wal-checkpoint)上运行PRAGMA语句,但这些语句不起作用。我在这里想念的是什么我也尝试过使用NSManagedObjectContext.MR_defaultContext.saveToPersistentStoreAndWait

我正在使用以下代码进行设置和保存。

MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreNamed("callithome.sqlite")

MagicalRecord.saveUsingCurrentThreadContextWithBlockAndWait({(context)->Void in
                    println("Data saved, I hope")})
MagicalRecord.cleanUp()

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您需要为sqlite商店启用DELETE pragma模式。这不会创建-wal和-shm文件。这将使您更容易在预填充的数据存储中使用单个文件。如果你想要去那条路线,你需要使用MagicalRecord 3.0以及一些额外的功能来为你的商店添加自定义选项。但是,您仍然可以将存储添加到协调器,并使该存储配置了正确的pragma选项。也就是说,如果您使用正常的核心数据,则不需要MagicalRecord。