【问题标题】:CloudKit - NSPredicate for finding all records that contain specified CKReference in a reference listCloudKit - NSPredicate 用于在参考列表中查找包含指定 CKReference 的所有记录
【发布时间】:2014-08-07 18:03:16
【问题描述】:

我正在开发一个 CloudKit 支持的应用程序,该应用程序的用户记录类型具有“以下”参考列表属性。我正在尝试构建一个查询以获取关注指定用户的每个用户(即指定用户在以下参考列表中显示为条目的那些用户)。

我目前正在尝试为CKQuery 构建我的NSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ IN following", [[CKReference alloc] initWithRecordID:currentUserID action:CKReferenceActionNone]];
CKQuery *query = [[CKQuery alloc] initWithRecordType:UserRecordType predicate:predicate];

而 CloudKit 返回以下错误信息:

"Unknown Item" (11/2003); server message = "did not find required record type";

我觉得我的谓词中可能遗漏了一些非常直截了当的东西。任何帮助将不胜感激!

【问题讨论】:

  • 我很好奇如何查询用户记录?据我所知,这是被禁止的。

标签: ios nspredicate cloudkit


【解决方案1】:

使用 CONTAINS 运算符测试列表成员资格:

CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:currentUserID action:CKReferenceActionNone];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"following CONTAINS %@", recordToMatch];

如果要查询超过 1 个引用,则需要对列表中的每个引用使用 AND 谓词类型的复合谓词。

【讨论】:

  • 这不起作用,因为following 字段是参考列表,而不是单个参考。
  • 我明白了,在这种情况下,我已经更新了参考列表的答案。
  • 这就是我所需要的,它工作得很好。谢谢!
【解决方案2】:

错误 11 表示查询在您的容器中找不到与您的记录类型匹配的任何项目。在您的情况下,Cloud Kit 中不存在 UserRecordType 类型的记录。您可以为该类型创建示例架构,然后查询将起作用。

【讨论】:

  • 确实存在于 CloudKit 中。查看标记为正确的答案。
  • 好的,谢谢。我收到错误 11,原因是记录不存在。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2016-02-19
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
相关资源
最近更新 更多