【问题标题】:Is there a limit to the number of CKReferenced records in CloudKit?CloudKit 中 CKReferenced 记录的数量是否有限制?
【发布时间】:2016-04-18 17:58:01
【问题描述】:

我正在尝试在 CloudKit 中存储联系人组,如果我尝试创建一大组记录,CKReferenced 到单个组记录,我会收到错误消息。

限制似乎是大约 700 条左右的记录。

有没有其他人看到过类似的结果,或者可以确认限制的存在(或不存在)?我在文档中或通过 Google 找不到任何内容。

注意:我已经将我提交的记录分成 400 或更少的批次,因为这似乎是一个硬性限制。

【问题讨论】:

  • 您遇到什么错误?它是 CKErrorCode.LimitExceeded 吗?首先使用以下方法转换记录: let errorCode:CKErrorCode = CKErrorCode(rawValue: error!.code)!
  • 超出限制。服务器消息 = "超过对单个记录的拥有引用数的限制"
  • 如果只有700左右,那就太可怕了。我正在开发的应用程序将在生产中达到该限制。然后,您应该使用带有 ID 的字符串,而不是 CKReference。唯一的缺点是如果删除父记录,您将不会自动删除。
  • 你能用那种大的关系来测试你的应用吗?看看其他人是否有同样的问题会很有用。
  • 我将在今晚晚些时候进行测试(大约 5 小时后)我还将测试它是否因 CKReferenceAction(非和 DeleteSelf)而异

标签: ios icloud cloudkit ckreference


【解决方案1】:

是与否 - 这取决于 CKReferences 是否有 CKReferenceActiondeleteSelf

CloudKit Web Services Reference* 中,Apple 列出了以下限制:

对单个目标的最大源引用数,其中操作为 delete self = 750

这可以解释为什么 EVCloudKitDao 能够超过这个限制(在上面的 cmets 中)-its CKReferences were previously created with a CKReferenceAction of None

尽管 CloudKit Web 服务文档 Designing for CloudKit reference links to it 中唯一提到了此限制,但它似乎是一个服务器端限制,无论您使用哪种 CloudKit API 都适用。

【讨论】:

  • 我遇到了这个确切的问题。感谢您的回答,否则我会花多少时间来解决这个问题。我将它从 .DeleteSelf 更改为 .None 并且我的 1000->1 和 5000->1 CKRecord->CkReference 测试现在工作正常。但是,我必须弄清楚如何手动进行级联删除。
  • 不幸的是,要么将您的记录划分为逻辑区域(因为您可以在单个 CKModifyRecordZonesOperation 中删除整个区域及其包含的记录。)
  • 还有另一种方法,那就是没有一个组对象,而是有一个组对象的小树(例如子目录)。这就是 Git 和其他应用程序避免目录中文件过多的方式;他们使用文件名的前两个字母作为目录名。你可以在你的 CK 模型中做类似的事情。
  • @DrewMcCormack:您是否测试过删除级联删除总数大于750的树的根记录(由于不同引用之间的.deleteSelf)成功删除所有记录?你测试过的最高限额是多少? (我很好奇,可能会对此进行深入研究,看看我是否可以达到内部 CloudKit 限制,因为似乎还有其他一些事情。)
  • 我没有测试过这个,不,所以值得做。但我认为该限制与内部用于跟踪级联引用的某些表有关,并且是每条记录的限制。我不知道对这些引用的总数有任何限制,或者在单个级联删除中可以触发的数量。
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2011-02-08
相关资源
最近更新 更多