CloudKit:获取列表属性中具有特定元素的记录
Posted
技术标签:
【中文标题】CloudKit:获取列表属性中具有特定元素的记录【英文标题】:CloudKit: fetching records that have a certain element in a list attribute 【发布时间】:2017-02-28 03:51:43 【问题描述】:我想知道是否可以在 CloudKit 中形成一个 NSPredicate
来执行以下操作:
假设我有一些记录类型 A。假设 A 有一些属性 b,其类型为 [CKReference]
。让 c 为 CKReference
类型的某个元素,它可能在 b 中。
我希望查询列表 b 中有 c 的所有 A 类型的记录。 NSPredicate
可以做到这一点吗?
提前致谢!
编辑
我基本上想这样做 (CloudKit - NSPredicate for finding all records that contain specified CKReference in a reference list),但在 Swift 3 中。我在网上找不到好的资源来解释如何在 NSPredicate
中使用 contains
。
【问题讨论】:
【参考方案1】:就我在问题中使用的变量而言,这最终对我有用:
let
c= CKReference(recordID: userRecordID!, action: .none)
let joinedPredicate = NSPredicate(format: "%K CONTAINS %@",
b,
c)
。
let joinedQuery = CKQuery(recordType:
A, predicate: joinedPredicate)
【讨论】:
【参考方案2】:var predicates = [NSPredicate]()
predicates.append(NSPredicate(format: "("your key" CONTAINS[cd]%@)", filterString))
and initialising CKrefrence in swift
let reference = CKReference(recordID: example.recordID, action: .deleteSelf)
您可以使用-- let reference = CKReference(recordID: example.recordID, action: .deleteSelf) 创建 CKReference 对象,其中 example.recordId 将是 CloudKit 中的记录 ID,创建后您需要使用谓词进行过滤其中 predicates.append(NSPredicate(format: "("your key" CONTAINS[cd]%@)", filterString)) 过滤字符串将包含您创建的 CKReference 对象的引用 -
【讨论】:
请解释您的解决方案,而不仅仅是粘贴代码。 您可以使用-- let reference = CKReference(recordID: example.recordID, action: .deleteSelf) 创建 CKReference 对象,其中 example.recordId 将是 CloudKit 中的记录 ID,创建后您需要让您的过滤器使用谓词 where predicates.append(NSPredicate(format: "("your key" CONTAINS[cd]%@)", filterString)) 过滤器字符串将包含您创建的 CKReference 对象的引用 我的意思是添加到您的答案中。这已被标记为低质量帖子。 感谢您的回复!CONTAINS[cd]
中的cd
是什么意思?
这是在 NSPredicate 中过滤的关键 contains 将检查它是否包含在该数组或列表中 NSPredicate 可以通过在比较运算符(例如以 [c] 开始)。您可以使用 [d] 修饰符使比较变音符号不敏感,或者使用 [cd] 修饰符使比较变音符号不敏感。以上是关于CloudKit:获取列表属性中具有特定元素的记录的主要内容,如果未能解决你的问题,请参考以下文章
如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?