如果我的應用程序在Mountain Lion上創建了一個新的Core Data存儲(SQLite 3.7.12),當嘗試在Tiger(SQLite 3.1.3)上打開該文件時,該應用程序收到NSPersistentStoreInvalidTypeError
錯誤。在Tiger Mac上運行sqlite3
命令行工具在打開數據庫時不會產生任何錯誤,但「.dump」命令顯示SQLite認爲它是空的。爲什麼Core Data SQLite存儲不能從OS X 10.8到10.4向後兼容?
但是,如果數據庫是在Tiger上創建的,則可以在Mountain Lion上編輯,然後在Tiger上再次編輯,而不會出現任何問題。
Mountain Lion是否發生了一些變化,使新創建的持久性商店不再向後兼容?還是有一個我可以啓用的設置,以便它們是?據我所知,我沒有使用3.1.3中沒有的更新的SQLite特性,例如預寫式日誌記錄。另外,這在Lion上創建的數據庫不是問題。
更新:SQLite change history顯示版本3.7.10中存在文件格式更改。您應該能夠設置PRAGMA legacy_file_format=ON:
當這個標誌是,在一個文件 格式,可讀可寫的SQLite由去 回3.0.0的所有版本都創造了新的SQLite數據庫。
這適用於我直接使用sqlite3
。但是,當我通過NSSQLitePragmasOption
選項將其設置爲NSPersistentStoreCoordinator
時,它似乎被忽略:在Tiger上的sqlite3
再次將數據庫視爲空。
感謝您的回答。我認爲你對術語是正確的。據我所知,蘋果公司並沒有作出保證,但它通常的工作方式是蘋果明確告訴你什麼時候會發生什麼事情。如果NSPropertyListSerialization或NSKeyedArchiver突然更改格式,將會出現混亂。我已經更新了有關SQLite格式兼容性的信息,我相信他們承諾。 – 2012-08-09 15:32:04