首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CloudKit计数记录

CloudKit计数记录
EN

Stack Overflow用户
提问于 2014-06-12 19:01:38
回答 2查看 4.3K关注 0票数 17

我有一个“表”,它可能有很多记录,当添加一个新记录时,我需要知道当前表中已经有多少记录,因为我在计算一些值时使用它。我能找到的最接近的东西是请求所有这样的条目:

代码语言:javascript
运行
复制
var query : CKQuery = CKQuery(recordType: "Stars", predicate: NSPredicate(format: "mass > 0"))
    var request : CKQueryOperation = CKQueryOperation(query: query)
    var starCount = 0

    request.queryCompletionBlock = {
        (cursor:CKQueryCursor!, error:NSError!) in
        if error {
            completionHandler(ECOResponse.error(error.description), starCount)
        } else {
            completionHandler(ECOResponse.ok(), starCount)
        }
    }

    request.recordFetchedBlock = {
        (record:CKRecord!) in
        starCount += 1
    }

我希望queryCompletionBlock与CKQueryCursor一起给出一个计数或结果数组,但不幸的是它没有。

还有其他方法来计算表中的行数吗?

EN

回答 2

Stack Overflow用户

发布于 2014-07-23 12:47:18

不,不可能获得符合您的查询的记录总数。此外,通过列举结果,答案可能是错误的。CloudKit返回的记录数量没有固定。CloudKit有一种机制来决定返回多少条记录。可以将其设置为CKQueryOperation对象上的固定数字。默认情况是:

代码语言:javascript
运行
复制
operation.resultsLimit = CKQueryOperationMaximumResults;

该属性的文档显示:

当使用该值时,服务器选择一个限制,其目标是提供尽可能多的返回记录的最佳结果数,同时尽量减少接收这些记录的延迟。但是,如果您知道要处理固定数量的结果,请相应地更改此属性的值。

如果您的计数与此固定数字相同,则可能有比返回的查询更多的记录。

票数 9
EN

Stack Overflow用户

发布于 2019-02-16 10:12:53

不可能以非迭代的方式获得匹配查询的记录总数,但可以迭代进行。

CKQueryOperation允许您获取查询的所有可能结果,但可能只能通过多个后续操作:If the search yields many records, the operation object may deliver a portion of the total results to your blocks immediately, along with a cursor for obtaining the remaining records. 来源: CKQueryOperation,您可以忽略通过CKQueryOperation recordFetchedBlock返回的所有CKRecord实例,只需增加您自己的NSUInteger计数器即可。在我的测试中,调用recordFetchedBlock的总次数总是与预期的查询结果数量相匹配。

此外,为了提高效率,可以使用CKQueryOperationCKQueryOperation属性来实现limit the amount of data retrieved for each record during the search operation来源: desiredKeys注释在CKQueryOperation.h源文件中的If set to an empty array, declares that no user fields should be downloaded.状态

我使用CKQueryOperation成功地通过数百条记录进行了测试,从而超过了默认的CKQueryOperationMaximumResults批处理限制100。

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

https://stackoverflow.com/questions/24191999

复制
相关文章

相似问题

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