Проблема с запросом Couldkit и использованием предикатов в поле CKReference

у меня есть базовое непонимание того, как работает CKQuery.

У меня есть 2 типа записи:

  1. Friends : containing fields
    • url_of_profil_pic
    • название
    • ...
  2. Vote : containing fields
    • date_of_vote
    • target_of_the_vote (Справочник друзей CK)
    • the_one_who_vote (идентификатор пользователя облачного сервиса)

Я просто блуждаю, как мне получить url_of_profil_pic, когда я запрашиваю таблицу Vote

В принципе, хотел что-то вроде этого:

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"];

person Maxime Rouze    schedule 29.10.2018    source источник


Ответы (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 (документы).

person Clifton Labrum    schedule 13.11.2018
comment
Это работает, большое спасибо, как вы (и Apple) говорите, я буду использовать CKAsset :) - person Maxime Rouze; 20.11.2018