У меня есть таблица в CloudKit (UserCourse), которая содержит ссылку на пользователя, ссылку на курс и различные сводные данные для этой комбинации пользователя + курс (например, дата начала, статус и т. Д. * 1014). *). Пользователь может выбрать один и тот же курс несколько раз.
В одном представлении моего приложения я показываю количество пройденных пользователем курсов - этот запрос работает нормально и показывает общее количество, включая дублированные версии комбинация пользователь + курс.
После этого у меня появится последующее представление, в котором я хочу перечислить все курсы, пройденные зарегистрированным пользователем, с подробной информацией о курсе. Моя проблема в том, что я могу получить только одну копию курса, которая была продублирована.
Сначала у меня есть запрос, который получает все записи из таблицы UserCourses для этого пользователя. По результатам я получаю ссылки на все курсы и передаю их в качестве входных данных для последующего запроса, который пытается получить все курсы из CK, чтобы я мог отобразить представление пользователю всех курсов, которые они прошли.
Проблема в том, что я не могу получить две копии одного и того же курса (например, один в процессе и один завершенный, например). Я пытался сделать запрос по recordName, но я понимаю, что это невозможно. Однако, когда я пытаюсь выполнить преобразование из recordName в Record ID (ниже) - я получаю разные идентификаторы записей для одного и того же имени записи, и мой запрос возвращает только один экземпляр курса, а не два.
recordIDs.append(CKRecord.ID(recordName: recordName))
и соответствующий код ниже. Открыты для предложений о том, как решить эту проблему. Я полагаю, я поступаю неправильно, и мои запросы должны разрабатываться иначе!
func getCoursesByReference(for references: [CKRecord.Reference],
_ completion: @escaping ([Course]?,Error?) -> Void) {
var recordIDs: [CKRecord.ID] = []
for each in references { //loop through the references being passed in
// and because you can't query by recordName in cloudkit, then convert to record ID
var recordName = each.recordID.recordName
recordIDs.append(CKRecord.ID(recordName: recordName))
}
//my predicate now has two different record IDs for the same recordName and as such my results set is 1 item instead of two
var predicate = NSPredicate(format: "recordID IN %@", recordIDs)
let query = CKQuery(recordType: "Course", predicate: predicate)
....remainder of code