2

我有一个应用程序,我正试图迁移到使用 CloudKit 来存储核心数据,以便它可以跨设备同步。

同步工作正常,我遇到的问题是应用程序向数据库添加了一些初始数据,这导致它在安装在另一台设备上时被复制。目前,如果已执行第一次运行,我正在使用用户默认值在本地存储布尔值,这显然只适用于每个设备

有什么方法可以查看云中是否已经存在数据并阻止添加初始数据。

如果对象已经存在但首次启动时本地商店中没有对象,Apple 的文档会建议它可能。 https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data

4

1 回答 1

1

假设两个设备都使用相同的 CloudKit 登录,那么如果您要检查的数据存储在用户记录中,您可以这样做:

  1. 获取该用户的 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)
            }
        }
    }
  1. 然后使用该 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

于 2020-09-04T08:00:30.283 回答