數組我試圖用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