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

Ján*_*nos 8 cloudkit ckquery

我需要创建一个CKQuery谓词包含记录引用的位置,而不是记录的字段.

像这样

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

我如何设置oCKReference,而不是字段!

我收到此错误:

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

Sen*_*ful 12

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

CKRecord:

let predicate = NSPredicate(format: "artist == %@", artist)
Run Code Online (Sandbox Code Playgroud)

CKRecordID:

let predicate = NSPredicate(format: "artist == %@", artistID)
Run Code Online (Sandbox Code Playgroud)

CKRecord与CKRecord:

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

CKReference与CKRecordID:

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


Ján*_*nos 10

我发现CKQuery类的参考答案,或者至少一个示例演示如何使用CKReferenceCKQuery:

CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:employeeID action:CKReferenceActionNone];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"employee == %@", recordToMatch];
Run Code Online (Sandbox Code Playgroud)

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