数组我试图用NSCompoundPredicate(orPredicateWithSubpredicates:)
与CloudKit
NSPredicate
但后来我对苹果的文档阅读OR
比较谓词不CloudKit
支持,所以我打了一个路障与此有关。的用法中或任何CloudKit谓词比较
我有一个CKReferences
的数组,我需要看看Record-type
的Reference list
是否包含这些引用。
我在如何组装谓词本身挣扎,因为我试图避免completionBlock
中的嵌套查询。
让我们说我引用下面的数组:
let refs = [CKReference]() // in my case the array isn't empty
我尝试以下,但它并没有奏效,因为不知何故,只查找数组的第一个对象,而不是整个阵列。
let predicate = NSPredicate(format: "tableName CONTAINS %@", argumentArray: refs)
在这里,如果我打印predicate
它打印:
的tablename CONTAINS CKReference:0x600000229c40; 20B54862-46CC-405F-BAE8-0DC8D3A52F78:(_ defaultZone:defaultOwner)>
正如你可以看到,它仅查找阵列中的第一个对象。
如果我使用ANY
运营商在谓语它可能工作,是这样的:
let predicate = NSPredicate(format: "ANY { '%@', '%@' } = tableName", args: refs[0], refs[1])
但在这里我的问题是我怎么能建立一个谓语,因为refs
阵列是动态的,我不知道它可能包含多少个对象,并且我不知道如何构建predicate args
访问refs
阵列的[0], [1], ...
。
你对此有任何解决方法吗?或者解决这个问题的最佳途径?
谢谢。
编辑
我想出一个办法来解决这个问题,但我不知道这是最有效的一个,所以我还是打开的答案和意见。
这里是我的临时解决方案:
for (i, reference) in refs.enumerated() {
let predicate = NSPredicate(format: "tableName CONTAINS %@", reference)
// CKQuery
// CKQueryOperation
// Database.add(CKQueryOperation)
if i == refs.count - 1 {
// UPDATE UI
}
}
“ ”表名IN%@“,refs'? – Larme
@Larme由于引用是REFERENCE_LIST类型,因此无法使用过滤器类型IN查询。 –
要清楚的是,你的'tableName'表示一个CKReference列表,并且你想使用另一个CKReference列表来创建一个谓词来查看这两个数组是否存在非空的交集。那是对的吗? – rmaddy