iOS: How can I merge conflicted UIDocument's in iCloud?

烂漫一生 提交于 2019-12-11 10:08:09

问题


I'm having trouble understanding what my options are to merge 2 or more conflicted versions of a UIDocument stored in iCloud. After detecting the document conflict, I currently use removeOtherVersionsOfItemAtURL to simply keep the latest version of the document's data. However, I would like to support merging conflicted documents.

The only resources and tutorials I found referred to Core Data and persistent stores for merging, and the examples used things like SQLite, which I don't use. In my case, each document is a separate file.

Background: My app uses custom NSObject subclasses (with relevant of properties) to store data. They are encoded and decoded (using NSCoding + NSKeyedArchiver/NSKeyedUnarchiver) inside of a UIDocument. I have set up my app to fully work with iCloud. It can make files ubiquitous and vice-versa, edit and delete them.

Please help me to understand what I can do regarding merging conflicted UIDocument's!


回答1:


You'll use NSFileVersion to get conflicting versions of the file. When you get into a conflict state, the +unresolvedConflictVersionsOfItemAtURL will give you NSFileVersion instances for any versions not considered "current". You can then use the URL property of NSFileVersion to get the contents of those conflicting versions.

Now you have more than one version of the document. How you resolve the conflict is up to you-- go through the conflicting versions and merge changes in whatever way makes sense for your document structure. If you can resolve it in code, you'll probably take some of the data from one of the conflict versions and copy it into the current version, until the current version contains the final merged version.

Once you've done that, save the document, remove the conflicting versions (removeOtherVersionsOfItemAtURL:error:), and mark the current file version as resolved. You might also want to use removeAndReturnError: to actually get rid of the older version(s).

Some more detail on this can be found in Apple's guide for resolving document version conflicts.



来源:https://stackoverflow.com/questions/14885404/ios-how-can-i-merge-conflicted-uidocuments-in-icloud

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!