2016-02-05 74 views
0

使用NSPredicate時,我試圖搜索數組中包含的所有對象(字符串)。下面的代碼示例工作,但謂詞只收集第一個索引中的對象?? NSPredicate用於CKQueryOperation。 每個Record都有一個名爲Category的密鑰的值。使用NSPredicate和數組進行cloudKit搜索

let array: [String] = ["Education", "Sport", "TV and Film"] 

    // select all records 
    //let predicate = NSPredicate(format: "Category = %@", category) 



    let predicate = NSPredicate (format: "Category == %@", argumentArray: array) 

    let query = CKQuery(recordType: "quizRecord", predicate: predicate) 

    // get just one value only 
    let operation = CKQueryOperation(query: query) 

    //code works but only queries Records with the Category for "Education" 
+0

http://stackoverflow.com/questions/18059170/nspredicate-predicatewithformatargumentarray-only-evaluating-first-argument? – Larme

+0

@Larme問題/答案在ObjectiveC中 - 我嘗試了很多變體,但我可以將它翻譯成Swift。 – pete

+0

你如何獲得多個價值? –

回答

2

嘗試更換:

"Category == %@" 

有了:

"Category IN %@" 
+0

謝謝,但我的回答如下錯誤:'CKException',原因:'無效謂詞:類別IN「教育」 IN「UserInfo = {ck_isComparisonError = true, – pete

+1

我知道這裏發生了什麼,將您的謂詞行從: 'let predicate = NSPredicate(format:」Category ==%@「,argumentArray:array)''let let predicate = NSPredicate(format:「Category ==%@」,argumentArray:[array])'。注意數組應該放在一個argumentArray參數數組中,這應該與上面描述的謂詞中的'IN'改變一起完成。 –

+0

是的,就這樣做了!輝煌的工作。謝謝丹尼我真的很感謝你的幫助 – pete

0

我有同樣的問題,因爲彼得·威利。我找到的解決方案是Danny Bravo解決方案的混搭,並對該解決方案發表評論。

let arrayPredicate = NSPredicate(format: "Name IN %@", argumentArray: [names]) 

要獲得多個結果,我需要在格式中使用關鍵字「IN」,並用[]包裝我的argumentArray。