Когда я выполняю этот код:Запросы по результатам RecordId в «Внутренняя ошибка сервера»
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: "Server Rejected Request" (15/2000); server message = "Internal server error"; uuid = 122AB9AA-6949-442D-B9D7-736A5B7D2EE5; container ID = "iCloud.net.xxxxxxx">
Однако, если изменить предикат к этому:
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"PatientName = %@ ", @"Doe, John"];
Восстановление выполняется правильно. Я подтвердил, что у Джона Доу есть рекордное имя, которое я ищу. Я также попытался переключить iCloud «Возможности» в настройках проекта. Я потратил часы и часы на эту проблему и попробовал много вариантов. Ничего не работает!
Если вы знаете идентификатор записи, вы должны получить запись с помощью 'CKFetchRecordsOperation' или, по крайней мере, использовать' fetchRecordWithID: completeHandler: '. Либо лучше, чем использовать 'performQuery', когда вы знаете идентификатор записи. – rmaddy
Спасибо за предложение, и оно работает! Если вы ответите на этот вопрос, я буду отмечать его как принятый. – user1092808