查询recordID会导致“内部服务器错误”

时间:2015-12-16 21:00:42

标签: objective-c cloudkit

执行此代码时:

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”。我在这个问题上花费了数小时和数小时,并尝试了很多变化。什么都行不通!

1 个答案:

答案 0 :(得分:1)

确保您已在CloudKit Dashboard中将此记录类型的记录ID标记为可查询。

选择您的记录类型,然后单击“元数据索引”。选中Record ID字段旁边的Query复选框,此错误应该消失。

除此之外,rmaddy的答案是对的 - 如果您只是想通过其标识符获取记录,则应使用CKFetchRecordsOperation而不是查询。