2015-05-14 63 views
5

我有一個對象數組,每個對象都有一個ID,我想獲取item.objectID包含在ID數組中的所有項目,我如何獲得該結果?如何使用NSPredicate CONTAINS IN數組獲得所有項目

什麼,我試圖做的,但我有創造predicateWithFormat的錯誤:無法分析格式字符串

NSString *predicateFormat = [NSString stringWithFormat:@"SELF.itemID CONTAIN IN (1,2,3,4,5,6,7,8)"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat]; 
filteredData = [localData filteredArrayUsingPredicate:predicate]; 

我避免這種情況正是:

NSString *predicateFormat = [NSString stringWithFormat:@"SELF.itemID = 1 OR SELF.itemID = 2 OR SELF.itemID = 3"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat: predicateFormat]; 
filteredData = [localData filteredArrayUsingPredicate:predicate]; 

因爲有是過濾器添加的其他條件。

+0

上面用CONTAINS IN寫的代碼是完美的。你想實現什麼請詳細說明。 –

+0

我更新了我的問題。 –

回答

4

你幾乎擁有了:)

NSArray *objects = @[ 
     @{ 
      @"itemID" : @1 
     }, 
     @{ 
      @"itemID" : @2 
     }, 
     @{ 
      @"itemID" : @3 
     }, 
     @{ 
      @"itemID" : @4 
     }, 
     @{ 
      @"itemID" : @5 
     } 
    ]; 

    NSArray *idsToLookFor = @[@3, @4]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemID IN %@", idsToLookFor]; 
    NSArray *result = [objects filteredArrayUsingPredicate:predicate]; 

    NSLog(@"result: %@", result); 

如果你不想在任何陣傳球,但是寫上「牽手」的斷言,語法是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemID IN { 3, 4 }"]; 

其結果將是:

result: (
     { 
     itemID = 3; 
    }, 
     { 
     itemID = 4; 
    } 
) 
+0

沒有通過任何數組的第二個答案正在工作,謝謝你救了我! –

5

只有IN需要:

NSArray * desiredIDs = @[@1, @2, @3, @4, @5]; 
NSString * predicateFormat = [NSString stringWithFormat:@"SELF.itemID IN %@", desiredIDs]; 
... 
+0

我也試過,我只是複製/粘貼你的答案,我得到了同樣的錯誤:無法解析格式字符串「SELF.itemID IN(1,2,3,4,5) –

+0

@ConstantinSaulenco我更新了我的答案包含一個變體而不將任何數組傳遞給謂詞。 –