2014-07-17 173 views
4

我可以很容易地获得特定ID的记录。如果我需要特定的东西,那么我可以使用CKQueryOperation。如何获取特定ID的记录?

我需要为它提供适当的断言,但我不能指定ID作为谓语的参数,因为它不支持CKRecordValue协议。另一个想法是使用CKReference,但如何编写适当的谓词呢?

如果我尝试使用字符串数组和评估agains recordID.recordName关键路径:

var references:[String] = IDs.map{$0.recordName} 
    var predicate = NSPredicate(format: "ANY recordID.recordName IN %@", references) 

我获得以下错误:

<CKError 0x17005f3b0: "Invalid Arguments" (12/1009); "Invalid predicate: recordKey (recordID.recordName) contains invalid characters"> 

谓词格式输出:

predicate ANY recordID.recordName IN {"AFF487BE-4A7E-4F76-8185-79FA2E1EFC33", "D4D83B37-97DE-4BF2-9E43-4C5522E36DF1", "0126008A-0B42-4F95-AB31-BB13B6215475", "6DE83AD9-F307-467D-A5EF-AD2B97B8E7F7", "F701ADBF-9BE7-4F42-8CA9-44D2D0E629F8", "38C4FB60-8A65-43F9-8E1E-4C48D5B60DCD"} 

任何帮助表示赞赏。

+0

嗨,@Alex你知道如何从CKRecordID的UDID字符串?例如“AFF487BE-4A7E-4F76-8185-79FA2E1EFC33” – codingrhythm

+0

嗨,@codingrhythm。你可以使用CKRecordID的recordName属性。 – Alex

+0

你是对的,现在才意识到,多么愚蠢的问题。 – codingrhythm

回答

3

可以使用CKFetchRecordsOperation获取其RecordIDs你已经知道的记录:

let fetchRecordsOperation = CKFetchRecordsOperation(recordIDs: recordIDs) 
fetchRecordsOperation.desiredKeys = desiredKeys 

初始化与CKRecordIDs数组操作要检索并返回在每个单独记录结果perRecordCompletionBlockfetchRecordsCompletionBlock中提取的所有记录。

您可以通过将NSString的数组设置为desiredKeys属性并使用您想要检索的字段的名称,来默认检索完整记录,或者只检索它们的一部分值。

+0

请向我们展示一个完整的示例,获取和查询具有特定ID的记录。谢谢! –

相关问题