从云套件中快速加载所有记录,避免限制结果

Posted

技术标签:

【中文标题】从云套件中快速加载所有记录,避免限制结果【英文标题】:swift load all record from cloud kit avoiding limit result 【发布时间】:2015-05-16 04:02:22 【问题描述】:

伙计们需要帮助我在网上找不到类似的东西即使将限制结果设置为固定值仍然不起作用无论我总是得到 100 条记录最大值我现在需要我数据库中的所有记录是 377 条记录并且更可能是 10k,但这个过程只会运行一次,有人可以帮我从数据库中捕获所有记录,避免 100 限制

我按照你的建议添加了光标,现在我有了一个想法,但现在它加载了 200 个结果而不是总数,请提供任何提示

 if foodList.count == 0
        loadingView.hidden = false
        loadMainDatabaseActivity.startAnimating()

        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "FoodListDataBase", predicate: predicate)
        let operation = CKQueryOperation(query: query)
        //operation.resultsLimit = CKQueryOperationMaximumResults
        operation.recordFetchedBlock =  (record: CKRecord!) in

            if record != nil
                count++
                foodList.append(record.objectForKey("foodname") as! String)
                categories.append(record.objectForKey("category") as! String)

            
        

        operation.queryCompletionBlock = (cursor: CKQueryCursor!, error: NSError!) in

            if cursor != nil 
                let newOperation = CKQueryOperation(cursor: cursor)
                newOperation.recordFetchedBlock = operation.recordFetchedBlock
                newOperation.queryCompletionBlock = operation.queryCompletionBlock
                newOperation.resultsLimit = 300
                publicDB!.addOperation(newOperation)
                println(count)
            
            self.loadingView.hidden = true
            self.loadMainDatabaseActivity.stopAnimating()
        

        publicDB.addOperation(operation)

    

【问题讨论】:

如果搜索产生许多记录,操作对象可能会立即将总结果的一部分传递给您的块,并带有一个用于获取剩余记录的游标。如果提供了游标,则在您准备好处理下一批结果时,使用它来初始化并执行单独的 CKQueryOperation 对象。 我按照你说的在我的查询完成块中添加了这个,但我现在收到 200 个结果,但不是总数任何提示请感谢如果 cursor != nil let newOperation = CKQueryOperation(cursor: cursor) newOperation.recordFetchedBlock = operation.recordFetchedBlock newOperation.queryCompletionBlock = operation.queryCompletionBlock newOperation.resultsLimit = 300 publicDB!.addOperation(newOperation) println(count) 你试过在闭包中移除resulLimit吗?还将 println(count) 放入 recordFetchBlock 我相信 println(count) 在最后一个 queryCompletitonBlock 被触发时不会被调用。由于光标将为零...所以可能您正在获取所有记录,您只是看不到最后一个 println。 感谢大家的支持,这里是我尝试删除限制并且已经在获取记录中打印(计数)但计数始终为 200 的更新,我知道我没有得到整个结果,因为在我的代码中,我将结果添加到数组中以创建自定义搜索,但仍然缺少结果 【参考方案1】:

我相信下面的帖子已经回答了这个问题:

CKQuery from private zone returns only first 100 CKRecords from in CloudKit

将 CKQueryOperationMaximumResults 更改为更大的数字。

【讨论】:

以上是关于从云套件中快速加载所有记录,避免限制结果的主要内容,如果未能解决你的问题,请参考以下文章

使用云功能从云存储中将数据加载到BigQuery中(替代功能?)

在 UITableView 中限制 NSFetchedResultsController 的结果

限制一页上数据库结果的可见性-spring boot

在“搜索”连接上请求 500 条记录超过了 graphql 中 100 条记录的“第一”限制

Oracle 查询:如何将返回的记录限制为计数 > 1 但显示完整结果的记录?

避免 AJAX 跨域限制