首页 > 解决方案 > 在 CK 查询中无法获得多个结果的问题,其中可能多次返回相同的记录

问题描述

我在 CloudKit (UserCourse) 中有一个表格,其中包含对用户的引用、对课程的引用以及该 User+Course 组合的各种摘要数据(例如,开始日期、状态等)。用户可以选择多次参加同一课程。

在我的应用程序的一个视图中,我显示了用户所学课程的数量 - 此查询工作正常并显示总数量,包括用户+课程组合的重复版本。

然后我有一个后续视图,我想在其中列出登录用户参加的所有课程以及课程详细信息。我的问题是我只能获得已复制的课程的一个副本。

首先,我有一个查询,该查询从 UserCourses 表中获取该用户的所有记录。从结果中,我获得了对所有课程的引用,并将其作为输入传递给后续查询,该查询尝试从 CK 获取所有课程,以便我可以向用户显示他们所学的所有课程的视图。

问题是我无法获得同一课程的两份副本(例如,一份正在进行中,一份已完成)。我试过按记录名称查询,但我知道这是不可能的。但是,当我尝试从 recordName 转换为 Record ID(如下)时 - 我得到相同记录名称的不同记录 ID,并且我的查询只返回 Course 的一个实例,而不是两个。

    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

标签: swiftcloudkit

解决方案


推荐阅读