执行此代码时:
CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName: @"95263874-C860-4190-A2BB-08B3E652B7AA"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"%K == %@", @"recordID", [[CKReference alloc] initWithRecordID: recordID action: CKReferenceActionNone]];
CKQuery *query = [[CKQuery alloc] initWithRecordType: @"Case" predicate: predicate];
[publicDatabase performQuery: query inZoneWithID: nil completionHandler: ^(NSArray *results, NSError *error) {
if (error) {
NSLog(@"Error = %@", error);
} else {
NSLog(@"Success");
}
}];
我收到此错误:
< CKError 0x618000042670:“服务器拒绝请求”(15/2000); server message =“内部服务器错误”; uuid = 122AB9AA-6949-442D-B9D7-736A5B7D2EE5; container ID =“iCloud.net.xxxxxxx”>
但是,如果我将谓词更改为:
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"PatientName = %@ ", @"Doe, John"];
检索工作正常。我已经确认John Doe有我正在搜索的记录名称。我也尝试在项目设置中切换iCloud“Capability”。我在这个问题上花费了数小时和数小时,并尝试了很多变化。什么都行不通!
答案 0 :(得分:1)
确保您已在CloudKit Dashboard中将此记录类型的记录ID标记为可查询。
选择您的记录类型,然后单击“元数据索引”。选中Record ID字段旁边的Query复选框,此错误应该消失。
除此之外,rmaddy的答案是对的 - 如果您只是想通过其标识符获取记录,则应使用CKFetchRecordsOperation
而不是查询。