ios - 通读我的应用程序的核心数据文件(.sqlite、.sqlite-wal)

标签 ios objective-c sqlite core-data

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

应用程序运行一段时间后,我假设收集了一些数据,现在我希望查看这些数据并查看写入的内容。

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

我得到了数据库文件,myAppDB.sqlitemyAppDB.sqlite-shmmyAppDB.sqlite-wal

当尝试查看它们时,.sqlite 似乎是一个空表(除了一些通用的 CoreData/sqlite 内容),而 -wal 文件拥有所有信息。

问题是,我只能在使用 TextEdit 打开它时才知道 wal 有有用的数据,而它并没有以非常可读的方式显示它,并且当我尝试使用SQLite 管理器应用程序收到一条警告,指出 wal 已加密,并要求我输入密码...

重要的是,我正在编写一个处理数据库的框架(模型文件和用于写入数据的代码位于框架内部),然后我在我正在开发的应用程序中运行这个框架。这是我用来从框架内创建商店的代码(使用 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-Editor 打开 sqlite 文件。和 CoreDataUtility但它们都覆盖并删除 .wal 文件的内容,并显示一个空表...它确实有模型(实体名称/属性等),但没有数据。

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

tl;博士

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

最佳答案

好吧,由于某种原因,我不得不强制不在我的商店中使用 WAL(使用 @"journal_mode":@"DELETE" 如所解释的 here )。

然后我只得到了 .sqlite 文件,没有 smhwal 文件,并且能够使用以下命令打开它并查看数据2 个提到的工具(Core-Data-Editor 和 CoreDataUtility)。

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

任何有关原因的见解将不胜感激......

关于ios - 通读我的应用程序的核心数据文件(.sqlite、.sqlite-wal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29598830/

相关文章:

python - pyodbc.DataError : ('22018' , “[22018] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]转换失败] 错误

java - 使用 ContentValues 将以零开头的字符串编号插入字符串列,但始终删除前导零

iphone - -ObjC 链接器标志有什么作用?

iphone - NSArray 的前三项变成 NSString?

ios - 处理 iPad Mini 屏幕尺寸

objective-c - 单击 UIWebView 上的链接时打开新的 UIViewController

objective-c - 如何制作 Objective-C 到 C 转换器

sqlite - 符号链接(symbolic link)在 Docker 镜像中丢失

ios - 我的应用程序在App Store上不支持iPhone 4s和5吗?

iphone - 适合 iPad 的 PDF 页面大小 (dpi) 是多少?