如何解决查询Cloud Kit核心数据记录
我有一个应用程序正在尝试迁移到使用CloudKit来存储核心数据,以便可以跨设备同步的情况。
同步工作正常,我遇到的问题是该应用程序向数据库添加了一些初始数据,这导致它在安装在另一台设备上时被复制。当前,如果执行了第一次运行,我正在使用用户默认值在本地存储布尔值,这显然仅适用于每台设备
有什么方法可以查看云中是否已经存在数据,并防止添加初始数据。
Apple的文档会建议如果某个对象已经存在,但是在首次启动时,本地商店中没有任何对象。 https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data
解决方法
假设两个设备都使用相同的CloudKit登录名,那么,如果要检查的数据存储在用户记录中,则可以执行以下操作:
- 获取该用户的CloudKit ID
func iCloudUserIDAsync(complete: @escaping (_ instance: CKRecord.ID?,_ error: NSError?) -> ()) {
let container = CKContainer.default()
container.fetchUserRecordID() {
recordID,error in
if let error = error {
//handle
} else {
self.userRecordID = recordID
complete(recordID,nil)
}
}
}
- 然后使用该ID查询CloudKit,以使用户返回:
CKContainer.default().publicCloudDatabase.fetch(withRecordID: userRecordID) { (results,error ) in
if results != nil {
//got the user record,do what you want with it
}
if let error = error {
//handle error
}
}
或者,如果您的数据不在用户记录中,那么您将要使用CKQueryOperation和谓词进行查询:此处的好教程:https://www.raywenderlich.com/4878052-cloudkit-tutorial-getting-started
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。