I've read the Apple docs and Ray Wenderlich's tutorial. It seems that I'm forced to use UIDocument so I read it up in the docs. I've found that it's effective to use Document-based approach.
My problem is I don't want to be tied in techniques specific to the platform (iOS) thus my app has its own models made from scratch that only inherit from NSObject. This includes saving/loading.
Now, I need to integrate iCloud along with my old models. How will I do it in an elegant/effective way where I get to keep my old model implementation and be able to integrate iCloud?
You are not in any way forced to use UIDocument. You can use iCloud via NSFileManager and NSMetadataQuery. The general approach is:
When creating files
- Create the file locally, as normal without iCloud
- Use
-[NSFileManager setUbiquitous:itemAtURL:destinationURL:error:]to transfer the file to iCloud storage. - (if necessary) Check on upload progress using
NSMetadataQueryor by polling URL resource values.
When opening files
- Use
NSMetadataQueryto locate iCloud-resident files - Use
-[NSFileManager startDownloadingUbiquitousItemAtURL:error:]to begin download or to synchronize the local copy with the cloud copy. - Check on upload progress using
NSMetadataQueryor by polling URL resource values with[NSURL resourceValuesForKeys:].
When editing files
- Use
NSFileCoordinatorto coordinate your file access with the ubiquity daemon. - Use
NSFilePresenterto get notifications of changes to files.
This is all covered in sessions from WWDC 2012 (and maybe 2011, I don't recall), and the classes and methods you'll need are all in the iOS documentation.
来源:https://stackoverflow.com/questions/15631294/how-to-integrate-icloud-on-a-non-document-based-app