【问题标题】:CloudKit not returning the most recent dataCloudKit 不返回最新数据
【发布时间】:2014-12-10 02:11:24
【问题描述】:

我遇到了这个问题,我使用 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

我在这里错过了什么吗?

【问题讨论】:

    标签: ios icloud cloudkit icloud-api


    【解决方案1】:

    在 CloudKit 中保存记录与使用该记录中的值更新索引之间存在延迟。

    CKModifyRecordsOperation 成功完成时,您可以立即通过其记录标识符获取该记录。

    但是,将记录添加到服务器上的搜索索引时会有延迟,查询不会立即找到该记录。

    如果您使用CKQuery 支持视图,您需要保留已在本地修改的记录的侧表,并将这些记录拼接到视图中,直到查询开始返回该记录。

    【讨论】:

    • 我也发现了这一点。这个答案是我见过的最好的。但是,当 iCloud 完成它的事情时,是否有某种方法可以通知,或者是否有某种方法可以让 CKQuery 获取我们知道已成功保存的新记录。我注意到删除后的 CKQuery 效果很好。
    猜你喜欢
    • 2021-02-05
    • 2014-07-27
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多