我一直在尝试对一个大型应用程序进行改造,使其能够将文件存储在iCloud中。该应用程序并不是真正的“基于文档”,但这些文件可能被认为是配置文件或首选文件。
老实说,我并没有遵循苹果iCloud的所有指南。有些确实不符合应用程序的流程。当应用程序启动时,我从ubiquity目录读取文件(使用普通的文件读取),当我写入它们时,我使用普通的文件写入ubiquity目录。当应用程序启动时,我还调用:
[fileManager startDownloadingUbiquitousItemAtURL:url error:&error];我确实有一个NSFilePresenter在监视ubiquity目录中的变化。它会在文件更改时通知我,但从不会有任何冲突通知。
我的问题是,当我上传一个文件到iCloud时,它会创建一个附加了数字的单独文件。例如。
MyFile.skyset
MyFile 2 .skyset当多个应用程序正在向ubiquity目录写入MyFile.skyset时,似乎就会出现这些问题。
它们似乎不是冲突的文件版本。如果我使用NSFileVersion查找冲突和其他版本,我只看到MyFile.skyset的一个版本,并且它没有冲突。
我找不到任何文档来解释这个“版本化”文件是什么以及如何处理它。对这里发生的事情有什么想法吗?
发布于 2015-10-17 01:45:03
好吧,我不完全理解“版本”,但是通过改变我更新ubiquity目录中文件的方式,这个问题已经解决了。
我从以下位置更改:
[fileMgr removeItemAtPath:dstPath error:nil];
[fileMgr copyItemAtPath:srcPath toPath:dstPath error:&error];至:
NSData *data = [NSData dataWithContentsOfFile:srcPath];
[data writeToFile:dstPath atomically:NO];我认为在将更新的信息复制到ubiquity目录之前删除文件的操作让系统感到困惑。在切换到第二种形式后,我不再看到这个问题。
希望这个答案对其他人有所帮助。
https://stackoverflow.com/questions/33159884
复制相似问题