2013-02-14 2 views
1

iCloud에 저장된 UIDocument의 충돌하는 버전이 두 개 이상 병합되는 내 옵션을 이해하는 데 문제가 있습니다. 문서 충돌을 감지 한 후 현재 문서의 최신 버전을 유지하기 위해 현재 removeOtherVersionsOfItemAtURL을 사용합니다. 그러나 충돌하는 문서를 병합하는 것을 지원하고 싶습니다.iOS : 충돌 한 UIDocument를 iCloud에서 어떻게 병합 할 수 있습니까?

내가 찾은 유일한 리소스 및 자습서는 핵심 데이터와 병합 저장소를 참조했으며 예제에서는 SQLite과 같은 것들 (예 : 사용하지 않는 것들)을 사용했습니다. 필자의 경우 각 문서는 별도의 파일입니다.

배경 : 내 앱은 사용자 정의 NSObject 하위 속성 (관련 속성 포함)을 사용하여 데이터를 저장합니다. 그들은 UIDocument 안에 인코딩되고 디코딩됩니다 (NSCoding + NSKeyedArchiver/NSKeyedUnarchiver). iCloud와 완벽하게 작동하도록 앱을 설정했습니다. 파일을 유비 쿼터스로 만들거나 편집 할 수 있습니다.

충돌하는 병합과 관련하여 무엇을 할 수 있는지 이해할 수 있도록 도와주세요. UIDocument's!

답변

4

충돌하는 파일 버전을 얻으려면 NSFileVersion을 사용하십시오. 충돌 상태가되면 +unresolvedConflictVersionsOfItemAtURL은 "현재"로 간주되지 않는 모든 버전에 대해 NSFileVersion 인스턴스를 제공합니다. 그런 다음 URL 속성을 NSFileVersion으로 사용하여 충돌하는 버전의 내용을 가져올 수 있습니다.

이제 문서의 버전이 두 개 이상 있습니다. 충돌을 어떻게 해결할 것인지는 당신에게 달려 있습니다. 충돌하는 버전을 살펴보고 문서 구조에 어떤 방식 으로든 변경 사항을 병합하십시오. 코드에서 해결할 수있는 경우 충돌 버전 중 하나에서 데이터를 가져 와서 현재 버전에 최종 병합 버전이 포함될 때까지 현재 버전으로 복사합니다.

일단 작업을 완료하면 문서를 저장하고 충돌하는 버전 (removeOtherVersionsOfItemAtURL:error:)을 제거하고 현재 파일 버전을 해결 된 것으로 표시하십시오. 실제로 이전 버전을 제거하려면 removeAndReturnError:을 사용하는 것이 좋습니다.

자세한 내용은 Apple's guide for resolving document version conflicts에서 확인할 수 있습니다.

+0

확인 만하면 iOS에서 자동으로 변경 사항을 병합하는 방법을 결정할 방법이 없습니다. 변경 사항이 프로그램 방식의 병합이 필요한 경우 약간의 속도 저하가있을 수 있습니다 ... – Anton

+0

아니요, 문서 구조가 ** 모든 항목 ** 일 수 있습니다. iOS가 자동으로 임의의 데이터에서 충돌을 해결하는 방법을 찾지 못합니다. 컬렉션. 핵심 데이터를 사용하고 있다면 속성 별 해결을 시도 할 수 있습니다. –

관련 문제