我一直在尝试改造一个大型应用程序,让它将文件存储在iCloud中。该应用程序并非真正"基于文档"但这些文件可能被认为是配置或偏好文件。
说实话,我没有遵循所有Apple iCloud指南。有些人真的不适应应用程序的流程。当应用程序启动时,我从ubiquity目录中读取文件(使用普通文件读取),当我编写它们时,我使用普通文件写入ubiquity目录。当应用程序启动时,我也会打电话:
[fileManager startDownloadingUbiquitousItemAtURL:url error:&error];
我确实有一个NSFilePresenter正在观察ubiquity目录中的变化。它通知我文件更改,但从来没有任何冲突通知。
我的问题是,当我将文件上传到iCloud时,它会创建一个附加数字的单独文件。 E.g。
MyFile.skyset
MyFile 2 .skyset
当多个应用程序将MyFile.skyset写入ubiquity目录时,这些似乎会出现。
他们似乎不是冲突的文件版本。如果我使用NSFileVersion来查找冲突和其他版本,我只会看到MyFile.skyset的一个版本并且它没有冲突。
我无法找到任何文档来解释这个"版本化的内容"文件是以及如何处理它。关于这里发生了什么的任何想法?
答案 0 :(得分:0)
好吧,我不完全理解“版本”,但问题是通过更改ubiquity目录中的文件更新方式来解决的。
我改变了:
[fileMgr removeItemAtPath:dstPath error:nil];
[fileMgr copyItemAtPath:srcPath toPath:dstPath error:&error];
要:
NSData *data = [NSData dataWithContentsOfFile:srcPath];
[data writeToFile:dstPath atomically:NO];
我看起来在将更新的信息复制到ubiquity目录之前删除文件的操作使系统混乱。切换到第二种形式后,我不再看到这个问题了。
希望这个答案有助于其他人。