2016-05-31 57 views
1

我有一個主陣列叫做originalListArray有多個對象。這裏是對象的例子。 Example.json使用NSPredicate ANY和IN過濾NSArray與NSDictionary(對象的嵌套級別)?

我想找到一些來自originalListArray對象,誰amenity_id與我的過濾數據進行匹配的。 我這樣做,創建一個謂詞使用任何self因爲NSArray與NSDictionary,並在該對象可能有NSArray數據。

這工作正常。

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id =='1')"]; 

這是行不通的。

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id in ('1','2','3')"]; 

所以單值可以是過濾器很容易,但在usign其oparation碰撞和錯誤是這樣的。

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: '無法分析格式字符串 「在任何amenities.amenity_id( '1', '2', '3')」'

先進的感謝,如果任何人可以幫助我。

+2

'[NSPredicate predicateWithFormat:@ 「ANY amenities.amenity_id IN%@」,@ @ 「1」,@ 「2」,@ 「3」]]'? – Larme

+1

@Larme是的工作。首先,感謝您的快速響應,但我不明白爲什麼我必須通過陣列。因爲IN查詢我們通常以逗號分隔的值作爲字符串傳遞。 –

+0

如果你記錄工作謂詞,你會發現它實際上是「@」任何amenities.amenity_id IN {'1','2','3'}「'(使用手鐲而不是括號)。不,使用佔位符(%@)傳遞它可以在需要時更輕鬆地進行更改。 – Larme

回答

2

我認爲最好將數組作爲參數傳遞給%@佔位符。

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN %@", @[@"1",@"2",@"3"]] 

這樣的話,你可以手動創建數組,如果你需要改變它,它更容易。

如果你還是想要它做它手動更改 「字符串格式」:

[NSPredicate predicateWithFormat:@"ANY amenities.amenity_id IN {'1', '2', '3'}"]