首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CKQueryOperation queryCompletionBlock未调用

CKQueryOperation queryCompletionBlock未调用
EN

Stack Overflow用户
提问于 2020-12-03 17:07:50
回答 2查看 161关注 0票数 0

我使用的CKQueryOperation显然对我的大多数用户都很好。然而,对其中一些人来说,这是行不通的。问题是queryCompletionBlock没有被调用。

分析用户日志--我可以看到,它对大多数用户都很好,但对少数用户却不起作用。它在所有类型的iPhone模型中都失败。但是iOS总是在失败的设备上使用iOS 14.2。不幸的是,我无法在我的设备上重现这个问题,这使得无法对其进行调试。

我已经检查过这个问题与互联网连接类型(wifi或数据)无关。

有什么想法吗?

这是密码

代码语言:javascript
复制
func fetchTeams(_ success: @escaping (_ result: [CKRecord]?) -> Void,
                       failure: @escaping (_ error: NSError) -> Void) {
        
        bfprint("fetchTeams starts")
        let type = RecordType.Team
        let predicate = NSPredicate(format: "TRUEPREDICATE")
        let query = CKQuery(recordType: type.rawValue, predicate: predicate)
        let operation = CKQueryOperation(query: query)
        allTeamsRecords = []
        executeQueryOperation(operation,
                                   success: success,
                                   failure: failure)
    }
    
    private func executeQueryOperation(_ queryOperation: CKQueryOperation,
                                              success: @escaping (_ result: [CKRecord]?) -> Void,
                                              failure: @escaping (_ error: NSError) -> Void) {
        
        bfprint("executeQueryOperation starts")
        
        let configuration = CKOperation.Configuration()
        configuration.qualityOfService = .userInitiated
        queryOperation.configuration = configuration
        queryOperation.queuePriority = .veryHigh

        queryOperation.recordFetchedBlock = { [weak self] (record) in
            guard let strongSelf = self else {
                bfprint("CloudKitDataProvider was deallocated before we got all team records")
                return
            }
            strongSelf.allTeamsRecords.append(record)
        }
        
        queryOperation.queryCompletionBlock = { [weak self] (cursor, error) in
            bfprint("fetch teams operation completion block called")
            if let cursor = cursor {
                bfprint("We got a new cursor fetching teams")
                let newOperation = CKQueryOperation(cursor: cursor)
                guard let strongSelf = self else {
                    bfprint("CloudKitDataProvider was deallocated before we got all team records")
                    return
                }
                strongSelf.executeQueryOperation(newOperation,
                                           success: success,
                                           failure: failure)
            }
            else if let error = error {
                DispatchQueue.main.async(execute: {
                    failure(error as NSError)
                    bfprint("Cloud Query Error - Fetching Teams): \(error)")
                })
            }
            else {
                DispatchQueue.main.async(execute: {
                    bfprint("Get teams finished successfully")
                    guard let strongSelf = self else {
                        bfprint("CloudKitDataProvider was deallocated before we execute success closure")
                        return
                    }
                    success(strongSelf.allTeamsRecords)
                })
            }
        }
        Self.publicDB.add(queryOperation)
        bfprint("query added to database")
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-31 11:39:10

我百分之九十九肯定是iOS的问题。在用户更新到iOS 14.3之后,问题消失了

票数 0
EN

Stack Overflow用户

发布于 2020-12-10 18:41:43

我不知道在您的情况下有什么特别的错误,但是我可能会提供一些关于CloudKit的一般性指导,因为我已经使用它多年了。CloudKit确实是可靠的,但也有点不可靠。:)

以下是一些建议:

data.

  • Background
  • 内置机制,以反复检查是否有最新的
  • 通知不总是出现。有一种方法可以获取可能是missed.
  • Development的数据,而且产品的总体性能似乎有点不可靠。
  • CloudKit仪表板需要不时刷新(就像web浏览器中的整个页面),因为即使使用接口中的重新加载和查询按钮,所显示的状态也会变得陈旧。

因此,在您的示例中,您可能有一种方法可以反复尝试CKQueryOperation,以便在CloudKit上出现混乱时重新尝试。维护与CloudKit同步的本地缓存是确保数据准确的最佳方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65130700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档