CKQuery操作非常慢

时间:2019-02-05 23:51:00

标签: ios swift cloudkit

我正在使用CloudKit存储记录,包括CKAsset,它是一个图像(不超过400 kb)。当我尝试在数据库中查询这些记录时,获得第一条记录会花费很长时间,超过10秒,即使以我的互联网速度,我知道它应该花费不到1.5秒的时间。其他记录通常在第一个进入后1秒钟之内很快加载。这是该操作的代码。我尝试添加operation.queuePriority = .veryHighoperation.qualityOfService = .userInteractive,但它们根本不会改变速度。为什么会这样呢?有办法提高效率吗?移至生产数据库时,是否可以解决此问题?谢谢你的帮助。

let query = CKQuery(recordType: ClubType, predicate: predicate)
        // Sort so that you get the biggest first
        query.sortDescriptors = [NSSortDescriptor(key: "numFollowers", ascending: false)]
        let operation = CKQueryOperation(query: query)
        // Limit on num results
        operation.resultsLimit = n
        operation.queuePriority = .veryHigh
        operation.qualityOfService = .userInteractive

    // Gets called once for each record
    operation.recordFetchedBlock = { r in
        let c = Club()
        // Get data from club
        c.id = r.recordID.recordName
        if let n = r["name"] as? String {
            c.name = n
        }
        if let f = r["numFollowers"] as? Int {
            c.numFollowers = f
        }
        if let category = r["category"] as? String {
            if let cat = ClubCategory(rawValue: category) {
                c.category = cat
            } else {
                c.category = ClubCategory.none
            }
        }
        if let isPublic = r["isPublic"] as? Int {
            if isPublic == 1 {
                c.isPublic = true
            } else {
                c.isPublic = false
            }
        }
        if let asset = r["coverPhoto"] as? CKAsset {
            c.imgUrl = asset.fileURL
            if let img  = c.imgUrl?.image() {
                c.coverImage = img
            }
        }
        completion(c)
    }

    self.publicDB.add(operation)

0 个答案:

没有答案