swift - 在 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
解决方案
推荐阅读
- android - 更改 Admob 帐户后,我的广告没有展示
- python - Pyspark Parquet - 重新分区后排序
- azure - 注册 UnifiedAgentConfiguration Azure Migrate
- excel - 阻止 VBA 宏向 Excel 行数据添加额外的双引号
- terraform - Terraform 从 v0.11 迁移到 v0.12 的标签问题
- java - 具有非主键和不同名称的列的休眠文件 XML 连接表
- reactjs - 如何在 React-admin 中清除注销历史记录?
- python-3.x - NLP 句子分割比 Python 算法有什么好处?
- java - javax.net.ssl.SSLException:写入错误:ssl=0x7230272908:系统调用期间的 I/O 错误,将值发布到服务器期间管道损坏
- mysql - 计算所有过滤字段组合