当用户在我的应用中启用iCloud时,我需要将所有本地文件移动到iCloud。在这里,我使用setUbiquitous:itemAtURL:destinationURL:error:
来移动每个文件。问题是,如果(对于任何本地文件)iCloud上已存在相同的文件URL,则此方法将失败。
我的问题是,如何确定哪个文件较新(本地vs iCloud),以便我可以覆盖iCloud版本或丢弃每个文件的本地版本?或者,我可以以某种方式强制iOS执行上传并在iCloud上将文件状态设置为冲突,以便我的冲突解决方法能够接管并处理这个问题吗?
答案 0 :(得分:2)
FWIW,来自Apple的dox他们建议使用全有或全无的iCloud方法 - 即,一次询问用户是否应该启用iCloud,然后不要更改。
那就是说,根据您的情况,我建议在用户启用iCloud之后执行以下步骤:
1)运行具有无处不在的范围的NSMetaDataQuery,以获取此应用程序的云中已有的文件列表。 (请注意,查询必须在主线程上运行,否则您什么也得不回来。)
2)如果你有一个同名的文件,你可以使用NSMetaData中的最后一个修改日期密钥(NSMetadataItemFSContentChangeDateKey)来确定你应该使用哪一个(或者你想用来解决冲突的方法)
3)如果文件尚未存在于云中,则使用setUbiquitous方法将其放在那里。