CKQuery哪里有谓词而不是字段?

时间:2014-07-25 17:57:32

标签: cloudkit ckquery

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

喜欢这个

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

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

我收到此错误:

字段'

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

2 个答案:

答案 0 :(得分:11)

您可以使用 CKRecord CKRecordID (带或不带 CKReference )来匹配关系。

CKRecord:

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

CKRecordID:

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

CKReference with CKRecord:

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

CKReference with CKRecordID:

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

答案 1 :(得分:10)

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

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

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