2015-05-14 15 views
5

Mam tablicę obiektów i każdy ma identyfikator, i chcę uzyskać wszystkie elementy, gdzie item.objectID zawiera w tablicy identyfikatorów, jak mogę uzyskać ten wynik?Jak zdobyć wszystkie elementy z NSPredicate CONTAINS IN array

Co próbowałem zrobić, ale mam błąd na tworzenie predicateWithFormat: Nie można przeanalizować ciąg formatu:

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]; 

Właśnie co do tego uniknąć:

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

bo tam jest innym warunkiem do dodania do filtra.

+0

Kod napisany powyżej z CONTAINS IN jest doskonały. Co chcesz osiągnąć, proszę opracować więcej. –

+0

Zaktualizowałem moje pytanie. –

Odpowiedz

4

Prawie gdyby :)

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); 

A jeśli nie chce przejść w każdej tablicy, ale napisać predykat „w ręku”, składnia będzie:

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

a wynik będzie:

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

Druga odpowiedź bez podania jakiejkolwiek tablicy działa, dzięki, że uratowałeś mnie! –

5

Tylko IN potrzebne:

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

Próbowałem również, i po prostu skopiować/wkleić odpowiedź i otrzymuję ten sam błąd: Nie można przeanalizować ciąg formatu "SELF.itemID IN (1, 2,3,4, 5) –

+0

@ConstantinSaulenco Zaktualizowałem swoją odpowiedź dołączyć wariant bez przekazywania tablicy do predykatu. –

Powiązane problemy