[英]Syncing plist NSdata with iCloud using UIDocument and Swift
我已经构建了一个 iOS 应用程序 ( TimeFinder ),它使用 plist 存储用户数据,但我很难理解如何支持使用 iCloud 同步用户数据。
我认为以这种方式同步 plist 数据将是一项相当常见的任务,但我已经搜索了 web 寻找答案,我能找到的只是使用 Obj-C ( 一和二)的旧问答线程。 这些可能没问题,但不幸的是,我对 Obj-C 还不够熟悉,无法弄清楚如何将这些策略实施到我的 swift 项目中。 甚至关于基于文档的应用程序的 Apple 文档也完全使用 obj-c,并且没有对我的案例有用的示例。
为了让事情顺利进行,我设法实现了一些代码,将 plist 文件从本地存储复制到 iCloud Documents 容器,但考虑到潜在的冲突和数据损坏,这种策略似乎是一场噩梦。
有人可以给我一些关于如何使用 Swift 和 UIDocument 来实现我的目标的指示吗? 还是我应该只使用 iCloud 文件夹来存储我的 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")
}
}
您的文件可以通过 iCloud 在设备之间同步,同时保存在应用程序自己的Documents
目录中。 go 这种方式更好,因为您的文件格式是plist
,这对可能在 iCloud 文件夹中看到它的用户没有任何意义。
您可以通过以下方法将某个文件标记为普遍存在:
func setUbiquitous(_ flag: Bool,
itemAt url: URL,
destinationURL: URL) throws
更多细节在这里: https://developer.apple.com/documentation/foundation/filemanager/1413989-setubiquitous
There was no Swift when iCloud was introduced, but, to get the basic concept, you can check these WWDC 2011 slides https://download.developer.apple.com/wwdc_2011/adc_on_itunes__wwdc11_sessions__pdf/116_storing_documents_in_icloud_using_ios_5.pdf
提示:当您看到一些 ObjC API 时,在 Apple 文档中搜索它们,并将那里的语言更改为 Swift,它将向您展示相同的方法在 Swift 中的样子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.