Проблема с Couldkit Query и использованием предикатов в поле CKReference
У меня есть общее недоразумение о том, как работает CKQuery.
У меня есть 2 типа записей:
- Друзья: содержащие поля
- url_of_profil_pic
- название
- ...
- Голосовать: содержащие поля
- date_of_vote
- target_of_the_vote (друзья CKReference)
- the_one_who_vote (идентификатор пользователя cloudkit)
Я просто брожу, как я могу получить url_of_profil_pic, когда я запрашиваю таблицу голосования
В принципе, хотел что-то вроде этого:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"the_one_who_vote = %@", recordReference.recordID];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Votes" predicate:predicate];
query.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc]initWithKey:@"createdAt" ascending:false]];
CKQueryOperation *operation = [[[CKQueryOperation alloc] initWithQuery:query] autorelease];
operation.desiredKeys = @[@"target_of_the_vote . url_of_profil_pic"];
operation.resultsLimit = 10;
operation.recordFetchedBlock = ^(CKRecord * _Nonnull record)
где эта строка будет предикатом, который дает мне URL.
operation.desiredKeys = @[@"target_of_the_vote . url_of_profil_pic"];
1 ответ
Предполагая, что вы загрузили запись, и что url_of_profil_pic
это CKAsset
, вы должны преобразовать URL ресурса в Data
объект, который вы можете сохранить в файл, как это:
//record is the CKRecord you fetched
if let asset = record["url_of_profil_pic"] as? CKAsset{
do{
try yourData = Data(contentsOf: asset.fileURL)
//Save yourData to disk...
}catch{
print("Error saving profile pic from CKAsset")
}
}
Apple рекомендует сохранять более 1 МБ как CKAsset
на CloudKit ( документы).