仔细阅读我应用的核心数据文件(.sqlite,.sqlite-wal)

时间:2015-04-13 06:11:10

标签: ios objective-c sqlite core-data

我正在尝试在我正在开发的iOS应用中浏览Core Data编写的数据。

应用程序运行一段时间后,我假设收集了一些数据,我现在希望查看数据,看看写了什么。

我尝试通过从设备获取应用容器来获取和浏览.sqlite文件( Xcode> Devices> myApp> Download Container ... )。

我收到了db文件,myAppDB.sqlitemyAppDB.sqlite-shmmyAppDB.sqlite-wal

当试图浏览它们时,似乎.sqlite是一个空表(除了一些通用的CoreData / sqlite东西),-wal文件包含所有信息。

事情是我只能知道wal在使用TextEdit打开它时有用的数据,它以一种非常易读的方式显示它,当我尝试使用SQLite时经理应用我警告说wal已加密,我被要求输入密码......

对于它的重要性,我正在编写一个处理db的框架(模型文件和用于编写数据的代码在框架内),然后我在我正在开发的应用程序中运行此框架。这是我用来在框架内创建商店的代码(使用MagicalRecord):

NSBundle *frameworkBundle = [NSBundle bundleForClass:[self class]];
[MagicalRecord setDefaultModelNamed:@"myAppStore.momd" inBundle:frameworkBundle];

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myAppStoreDB.sqlite"];
[MagicalRecord setupCoreDataStackWithStoreAtURL:storeURL];

更新:我设法同时使用Core-Data-EditorCoreDataUtility打开sqlite文件,但它们都覆盖并删除.wal的内容文件,并显示一个空表...它确实有模型(实体名称/属性等),但没有数据。

我的wal文件是873KB但是当我使用这两个工具之一打开sqlite时,它变为0Bytes ......

TL;博士

如何浏览我正在开发的应用程序的Core Data所写的信息?

1 个答案:

答案 0 :(得分:1)

好吧,出于某种原因,我不得不强迫我的商店不使用WAL(使用@"journal_mode":@"DELETE"解释here)。

然后,我只获得.sqlite个文件而没有smhwal个文件,并且能够使用上述2个工具打开它并查看数据(Core-Data-Editor和CoreDataUtility)。

我的猜测是,这与我从框架处理CoreData(创建moc,创建实体,保存等)这一事实有关,而不是来自应用程序。另一个猜测是,它与我使用MagicalRecord的事实有关。

任何有关原因的见解都将受到赞赏......