CloudKit: CKQuery показывает ошибку: ошибка: операция не может быть завершена. (CKErrorDomain ошибка 1.)
Я работаю над приложением iOS, реализующим cloudkit, но мне нужно запросить все записи с идентификатором, превышающим число. Например, у меня есть запись с идентификатором 23:
вот мой код:
CKContainer *myContainer = [CKContainer containerWithIdentifier:containerID];
CKDatabase *publicDatabase = [myContainer publicCloudDatabase];
CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:@"23"];
CKReference* recordToMatch = [[CKReference alloc] initWithRecordID:recordID action:CKReferenceActionNone];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordID >= %@", recordToMatch];
CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType predicate:predicate];
[publicDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
if (error) {
NSLog(@"error: %@", error.localizedDescription);
}
else {
}
}];
Но я получаю следующую ошибку:
ошибка: ошибка: операция не может быть завершена. (CKErrorDomain ошибка 1.)
Кто-нибудь из вас знает, как я могу настроить свой NSPredicate таким образом, чтобы я мог получить все записи с идентификатором больше 23?
Я очень ценю вашу помощь.
2 ответа
Для такого запроса вы можете использовать такой предикат, как:
в Свифте:
var predicate = NSPredicate(format: "recordID >= %@", CKRecordID(recordName: "23"))
В Задаче C:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recordID >= %@", [CKRecordID initWithRecordName:@"23"]];
Затем я предполагаю, что вы изначально создали объект CKRecords, указав этот номер. В противном случае значения recordID будут назначаться CloudKit и будут GUID.
Ваш идентификатор записи 23 хранится как тип CKRecordID, а не как число, поэтому вы не можете использовать любые числовые предикаты, например, больше, чем. Вы должны создать новое числовое поле в своей записи для хранения ваших целочисленных идентификаторов и запросить его.