13

CloudKit を使用して icloud に何かを保存するというこの問題が発生していますが、すぐに結果を取得しても挿入された最新のデータが返されません。

let todoRecord = CKRecord(recordType: "Todos")
todoRecord.setValue(todo, forKey: "todotext")
publicDB.saveRecord(todoRecord, completionHandler: { (record, error) -> Void in
        NSLog("Saved in cloudkit")
        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "Todos",
            predicate:  predicate)

        self.publicDB.performQuery(query, inZoneWithID: nil) {
            results, error in
            if error != nil {
                dispatch_async(dispatch_get_main_queue()) {
                    self.delegate?.errorUpdating(error)
                    return
                }
            } else {
                NSLog("###### fetch after save : \(results.count)")
                dispatch_async(dispatch_get_main_queue()) {
                    self.delegate?.modelUpdated()
                    return
                }
            }
        }

結果 :

Before saving in cloud kit : 3
CloudKit[22799:882643] Saved in cloudkit
CloudKit[22799:882643] ###### Count after save : 3

ここで何か不足していますか?

4

1 に答える 1

17

レコードが CloudKit に保存されてから、インデックスがそのレコードの値で更新されるまでには遅延があります。

が正常にCKModifyRecordsOperation完了すると、そのレコード識別子を介してそのレコードをすぐに取得できます。

ただし、レコードがサーバーの検索インデックスに追加されるまでには遅延があり、クエリはそのレコードをすぐには見つけられません。

ビューをバックアップするためにを使用している場合はCKQuery、ローカルで変更されたレコードのサイド テーブルを保持し、クエリがそのレコードを返し始めるまで、それらをビューにステッチする必要があります。

于 2015-02-21T01:48:50.907 に答える