Лучший способ запрашивать ссылки в CloudKit?

Скажем, у меня есть 2 объекта в моей базе данных CloudKit:

- Album
  - (NSString) title

- Photo
  - (NSString) name
  - (CKRefrence) album

Фотографии имеют CKReference к альбому. Это означает, что в 1 альбоме может быть много фотографий (как и ожидалось).

У меня есть экран, на котором я хочу отображать все альбомы и сколько фотографий в каждом альбоме. Каков наилучший способ запросить это? Если я сейчас запрошу «Альбомы», каждый альбом ничего не знает о своих фотографиях.


person user1007895    schedule 16.07.2014    source источник


Ответы (2)


Для каждого объекта альбома anAlbum вы должны сформировать свой предикат и запросить тип записи Photo следующим образом:

let predicate = NSPredicate(format: "album == %@", anAlbum)
let query = CKQuery(recordType: "Photo", predicate: predicate)

В завершенииHandler вы можете получить счетчик массива результатов, который будет количеством фотографий, принадлежащих anAlbum.

person Denis    schedule 16.07.2014
comment
Вы не можете просто запросить фотографии. Вам нужно извлечь Reference.RecordID из альбома и отправить их в виде массива в CKRecordFetchRequest. - person Yariv Nissim; 23.02.2015

CloudKit не предназначен для использования в качестве уровня модели, это просто структура подключения, которая предоставляет вам базу данных. Вы можете использовать CoreData в качестве уровня модели для решения вашей задачи. Создайте объект альбома, который имеет отношение один ко многим к объекту фотографии, который имеет отношение один к одному к альбому.

Затем сначала извлеките все альбомы и сопоставьте каждую запись с соответствующей сущностью альбома в CoreData. Затем получите все фотографии, сопоставьте их с сущностью Photo в CoreData и для каждой фотографии сопоставьте соответствующую сущность Album в CoreData.

person Alex    schedule 17.07.2014