我已经构建了一个使用iCloud存储用户数据的iOS应用程序(TimeFinder),但我正在努力理解如何支持使用plists同步用户数据。
我以为以这种方式同步plist数据将是一项相当常见的任务,但我在网络上到处寻找答案,所有我能找到的都是使用Obj-C (One和Two)的老式问答线程。这些可能很好,但不幸的是,我还不够熟悉Obj-C,无法弄清楚如何在我的swift项目中实现这些策略。即使是Apple documentation on Document-based applications也完全是obj-c的,在我的例子中缺乏有用的例子。
为了取得进展,我设法实现了一些代码,将plist文件从本地存储复制到iCloud文档容器,但考虑到潜在的冲突和数据损坏,这种策略似乎是一场噩梦。
有人能给我一些关于如何使用Swift和UIDocument实现我的目标的建议吗?或者我应该一开始就使用iCloud文件夹来存储我的plist?
下面是其中一个plist:
<plist version="1.0">
<array>
<dict>
<key>iconName</key>
<string>Folder</string>
<key>items</key>
<array>
<dict>
<key>text</key>
<string>Make handrail</string>
</dict>
<dict>
<key>text</key>
<string>Work out</string>
</dict>
<dict>
<key>text</key>
<string>Make kombucha </string>
</dict>
</array>
<key>name</key>
<string>Today</string>
</dict>
</array>
</plist>下面是一个示例,说明我如何至少将plist从本地目录复制到iCloud:
func copyDocumentsToiCloudDirectory() {
guard let localDocumentsURL = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: .userDomainMask).last else { return }
guard let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("Data") else { return }
var isDir:ObjCBool = false
if FileManager.default.fileExists(atPath: iCloudDocumentsURL.path, isDirectory: &isDir) {
do {
try FileManager.default.removeItem(at: iCloudDocumentsURL)
}
catch {
//Error handling
print("Error in remove item")
}
}
do {
try FileManager.default.copyItem(at: localDocumentsURL, to: iCloudDocumentsURL)
}
catch {
//Error handling
print("Error in copy item")
}
}发布于 2020-08-13 10:08:49
你的文件可以在保存在应用程序自己的Documents目录中的同时,通过iCloud在设备之间同步。这样做更好,因为您的文件格式是plist,这对可能在其iCloud文件夹中看到它的用户没有任何意义。
您可以通过以下方法将某些文件标记为无处不在:
func setUbiquitous(_ flag: Bool,
itemAt url: URL,
destinationURL: URL) throws更多详细信息请访问:https://developer.apple.com/documentation/foundation/filemanager/1413989-setubiquitous
在引入iCloud时还没有Swift,但是,要了解基本概念,您可以查看这些WWDC2011幻灯片https://download.developer.apple.com/wwdc_2011/adc_on_itunes__wwdc11_sessions__pdf/116_storing_documents_in_icloud_using_ios_5.pdf
提示:当您看到一些ObjC API,在苹果文档中搜索它们,并将那里的语言更改为Swift时,它将向您展示相同的方法在Swift中是什么样子。
https://stackoverflow.com/questions/63386841
复制相似问题