CKQuery 谓词有引用而不是字段?

Posted

技术标签:

【中文标题】CKQuery 谓词有引用而不是字段?【英文标题】:CKQuery where predicate has reference and not field? 【发布时间】:2014-07-25 17:57:32 【问题描述】:

我需要创建一个CKQuery,其中谓词包含对记录的引用,而不是记录的字段。

这样

let query = CKQuery(recordType: "OUP", predicate: NSPredicate(format: "o = %@", "FF4FB4A9-271A-4AF4-B02C-722ABF25BF44")

如何设置o 是 CKReference,而不是字段!

我收到此错误:

字段“o”的查询谓词中的字段值类型不匹配

【问题讨论】:

【参考方案1】:

您可以使用带有或不带有 CKReferenceCKRecordCKRecordID 来匹配关系。

CK 记录:

let predicate = NSPredicate(format: "artist == %@", artist)

CKRecordID:

let predicate = NSPredicate(format: "artist == %@", artistID)

带有 CKRecord 的 CKReference:

let recordToMatch = CKReference(record: artist, action: CKReferenceAction.None)
let predicate = NSPredicate(format: "artist == %@", recordToMatch)

带有 CKRecordID 的 CKReference:

let recordToMatch = CKReference(recordID: artistID, action: CKReferenceAction.None)
let predicate = NSPredicate(format: "artist == %@", recordToMatch)

【讨论】:

【参考方案2】:

我在CKQuery class reference 中找到了答案,或者至少在CKQuery 中找到了如何使用CKReference 的示例:

CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:employeeID action:CKReferenceActionNone];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"employee == %@", recordToMatch];

要匹配链接到您知道其 ID 的不同记录的记录,请创建一个谓词来匹配包含引用对象的字段,如清单 1 所示。在示例中,记录的员工字段包含指向的 CKReference 对象到另一个记录。执行查询时,如果本地创建的 CKReference 对象中的 ID 与记录的指定字段中找到的 ID 相同,则会发生匹配。

【讨论】:

以上是关于CKQuery 谓词有引用而不是字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用“IN”谓词进行 ckQuery?

Couldkit 查询和在 CKReference 字段上使用谓词的问题

在 CloudKit 中使用比较谓词进行查询

它是如何决定谓词“和”方法在 java 中将有一个消费者而不是生产者的?

分配谓词变量而不是 lambda 表达式

STL学习思想