2014-03-26 3 views
1

일반적으로 내 응용 프로그램의 핵심 데이터 파일을 백업 할 때 응용 프로그램이 실행되는 동안 .sqlite 파일을 다른 위치로 복사합니다. 그러나 저널링 (월)이 활성화되었으므로 더 이상 작동하지 않습니다. NSPersistentStoreCordinator 또는 NSManagedObjectContext가 새 파일을 쓰는 방법을 볼 수 없습니다.Copy/Backup 영구 저장소

    • 이 @ 다시 영구 저장소 개방을 닫습니다 : 나는이 개 방법이 어쩌면 같은데요 { "journal_mode"@를 : "삭제"를 @} 다음 .sqlite 파일을 복사합니다.
  1. 다른 영구 저장소를 추가하고 원본 ps에서 새 저장소로 복사 할 수 있습니까?

더 좋은 아이디어가 있습니까? 감사합니다.

답변

6

저널 모드를 변경하면 저널 파일이 제거되므로 간단합니다. Core Data가 실제로 SQLite 파일에 대한 모든 새로운 변경 사항을 플러시했다고 보장 할 수 없기 때문에 귀하의 사용을 믿을 수는 없을지 모르겠습니다. OK 일 수도 있지만 Core Data가 아직 작성하지 않은 메모리 내 변경 사항이있을 수 있습니다. 이것은 거의 확실하게 안전하지만 잠시 후에는 제대로 작동하지 않을 가능성이 적습니다.

옵션 2는 더 많은 작업이 필요하지만 더 안전합니다. NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:error: 메서드 ("다른 이름으로 저장"작업에 유용하다고 언급 된 문서)을 사용하여 두 번째 영구 저장소를 만듭니다. 핵심 데이터를 작성하여 사본을 작성하면 필요한 모든 것이 실제로 복사되었는지 확인해야합니다. 은 주 영구 저장소 코디네이터에서 수행하지 마십시오. 마이그레이션 후 PSC가 원본 저장소 개체에 대한 참조를 삭제합니다 (해당 파일은 여전히 ​​있지만 해당 PSC에서 더 이상 사용하지 않음). 해당 단계는

  1. 입니다. 새 마이그레이션 전용 NSPersistentStoreCoordinator을 만들고 원래 영구 저장소 파일을 추가하십시오.
  2. 새 PSC를 사용하여 새 파일 URL로 마이그레이션하십시오.
  3. 이 새로운 PSC에 대한 모든 언급을 버리고 다른 용도로 사용하지 마십시오.
+0

옵션 3은 SQLite 파일과 관련 저널링 파일을 복사 할 수 있습니까? 저널링 파일의 파일 이름은 sqlite 파일과 동일하지만 경로 확장자가 다릅니다. –

+0

답변 해 주셔서 감사합니다. 영구 저장소 메타 데이터는 어떻습니까? 나는 내 * .sqlite 데이터베이스가 다른 장치에 복원 된 후에 그 파일을 잃어버린다는 것을 알았다. 그것은 사실인가 내 실수인가? –

+0

메타 데이터는 SQLite 파일의 별도 테이블에 저장됩니다. 그것을 피하기 위해 특별한 조치를 취할 필요는 없습니다. 그러나 저널 파일의 기록을 잃어 버리면 메타 데이터를 포함한 모든 종류의 데이터가 손실 될 수 있습니다. 당신이 그것을 어떻게 든 잃어 버렸다면, 잃어버린 원인을 설명하는 질문을 올리십시오. –