使用 CKQueryOperation 和 CKReference 获取大集合

Posted

技术标签:

【中文标题】使用 CKQueryOperation 和 CKReference 获取大集合【英文标题】:Fetch large set using CKQueryOperation and CKReference 【发布时间】:2018-06-17 13:23:42 【问题描述】:

我有一个 CKReference 附加到链接到一个 CKRecord 的 4000 条记录。他们没有任何动作 (CKReferenceActionNone)。 我希望能够使用 NSPredicate 的 CKQueryOperation 来获取所有这些记录,如下所示:

CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:backupRecord.recordID action:CKReferenceActionNone]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"parentRecord == %@", recordToMatch];

通常当我使用 CKQueryOperation 时,我可以使用 CKQueryCursor 循环它以获取超过 100 条记录。但是使用 CKReference,它首先工作 100,然后工作 200,但之后没有返回游标。

有没有办法使用 CKReference 获取 4000 条记录?

非常感谢!

【问题讨论】:

【参考方案1】:

我不确定这是否是您的光标问题的确切原因,但每条记录限制为 750 个引用

任何一条记录可以拥有的引用数量有一个硬性限制。此限制设置为 750 个引用。任何超过此限制的尝试都将导致服务器出错。

您可以在此处查看记录:https://developer.apple.com/documentation/cloudkit/ckrecord/reference

【讨论】:

这里不应该有影响。对于 CKReferenceActionNone,这个限制不应该适用。我已经成功测试了数千条引用记录。 我还成功添加了数千条引用记录。但是由于我也在使用 CKShare,因此无法获取它们。所以获取记录的用户实际上是通过 CKShare -> CKReference 获取另一个用户的私有区域。

以上是关于使用 CKQueryOperation 和 CKReference 获取大集合的主要内容,如果未能解决你的问题,请参考以下文章

Pkcs11 ECDSA 签名返回 CKR_DATA_INVALID

使用新游标多次执行 CKQueryOperation

CKQueryOperation resultLimit max 和 request count

CloudKit:删除记录的 CKQueryOperation

sun.security.pkcs11.wrapper.PKCS11Exception:CKR_ATTRIBUTE_TYPE_INVALID

CKQueryOperation queryCompletionBlock 只运行 3 次