2015-05-14 13 views
5

Ho una matrice di oggetti e ognuno ha un id, e voglio ottenere tutti gli oggetti in cui item.objectID contiene in una matrice di id, come posso ottenere quel risultato?Come ottenere tutti gli elementi con NSPredicate CONTAINS IN array

Quello che ho cercato di fare, ma ho un errore sulla creazione predicateWithFormat: Impossibile analizzare la stringa di formato:

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

ho proprio quello che per evitare questo:

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

perché ci è un'altra condizione da aggiungere per il filtro.

+0

Il codice scritto sopra con CONTAINS IN è perfetto. Quello che vuoi raggiungere, per favore, elabora di più. –

+0

Ho aggiornato la mia domanda. –

risposta

4

È quasi avuta :)

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

E se non si vuole passare in qualsiasi array, ma scrivere il predicato "in mano", la sintassi sarebbe:

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

e il risultato sarà:

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

La seconda risposta senza passare alcun array funziona, grazie mi hai salvato! –

5

Solo IN necessario:

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

Ho provato anche quello, e ho appena copiato/incollato la tua risposta e ottengo lo stesso errore: Impossibile analizzare la stringa di formato "SELF.itemID IN (1, 2,3,4, 5) –

+0

@ConstantinSaulenco Ho aggiornato la mia risposta includere una variante senza passare alcuna matrice al predicato. –