내 앱이 Mountain Lion (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에 없었던 write-ahead 로깅과 같은 새로운 SQLite 기능을 사용하지 않습니다. 또한 라이온스에서 만든 데이터베이스에는 문제가 없었습니다.
업데이트 : SQLite change history은 버전 3.7.10에서 파일 형식이 변경되었음을 보여줍니다. 당신은 PRAGMA legacy_file_format=ON을 설정할 수 있어야됩니다
이 플래그가 켜져, 새로운 SQLite 데이터베이스는 SQLite는 3.0.0로 다시 가는 모든 버전에서 읽고 쓸 수있는 파일 형식으로 작성됩니다.
이것은 나를 위해 sqlite3
를 직접 사용합니다. 그러나 NSSQLitePragmasOption
옵션을 통해 NSPersistentStoreCoordinator
으로 설정하면 무시되는 것으로 보입니다. Tiger의 sqlite3
은 데이터베이스를 다시 비어있는 것으로 간주합니다.
답변 해 주셔서 감사합니다. 나는 당신이 용어에 대해 옳다고 생각합니다. 필자가 아는 한, Apple은 보증을하지 않았지만 정상적으로 작동하는 방식은 Apple이 무언가가 망가질 때 명시 적으로 알려줍니다.NSPropertyListSerialization 또는 NSKeyedArchiver가 갑자기 형식을 변경하면 혼란이있을 것입니다. 나는 그들이 약속 한 것으로 믿는 SQLite 형식 호환성에 관한 정보로 질문을 업데이트했다. –