NSPersistentStoreInvalidTypeError
如果我的应用程序在 Mountain Lion (SQLite 3.7.12) 上创建了一个新的核心数据存储,则同一应用程序在尝试在 Tiger (SQLite 3.1.3) 上打开文件时会收到错误消息。在 Tiger Mac 上运行sqlite3
命令行工具在打开数据库时不会产生任何错误,但是 ".dump" 命令显示 SQLite 认为它是空的。
但是,如果数据库是在 Tiger 上创建的,则可以在 Mountain Lion 上进行编辑,然后在 Tiger 上再次进行编辑,没有任何问题。
Mountain Lion 中是否发生了一些变化,以至于新创建的持久性存储不再应该向后兼容?或者是否有我可以启用的设置以便它们启用?据我所知,我没有使用任何较新的 SQLite 功能,例如 3.1.3 中没有的预写日志记录。此外,这不是在 Lion 上创建的数据库的问题。
更新:SQLite 更改历史显示版本 3.7.10 中存在文件格式更改。您应该能够设置PRAGMA legacy_file_format=ON:
当这个标志打开时,新的 SQLite 数据库将以一种文件格式创建,该文件格式可由所有 SQLite 版本(回到 3.0.0)读写。
这适用于我sqlite3
直接使用。但是,当我通过NSSQLitePragmasOption
选项设置它时,NSPersistentStoreCoordinator
它似乎被忽略了:sqlite3
在 Tiger 上再次将数据库视为空。