2015-05-14 13 views
5

Nesnelerim var ve her birinin bir kimliği var ve item.objectID'nin bir dizi kimlikte içerdiği tüm öğeleri almak istiyorum, bu sonucu nasıl alabilirim? i yapmaya çalıştım neNSPredicate CONTAINS IN dizisi ile tüm öğeleri nasıl alabilirim

ama predicateWithFormat oluşturma konusunda bir hata var: biçim dizesi ayrıştırılamıyor:

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

ben sadece ne Bunu önlemek için:

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

çünkü orada filtre eklemek için diğer şarttır.

+0

CONTAINS IN ile yukarıda yazılı kod mükemmeldir. Ne elde etmek istiyorsan lütfen daha fazla detaylandırın. –

+0

Sorumu güncelledim. –

cevap

4

Neredeyse o

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

:) Ve her dizide geçer, ama "el" yüklemi yazmak istemiyorsanız, sözdizimi olacaktır vardı:

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

ve sonuç olacaktır: Yalnızca IN gerekli

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

Herhangi bir dizi geçmeden ikinci cevap çalışıyor, teşekkürler beni kurtardı! –

5

:

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

Ayrıca bunu denedim ve ben sadece cevap kopyalayın/yapıştırın ve aynı hatayı alıyorum: "SELF.itemID IN (1, 2,3,4, 5) –

+0

@ConstantinSaulenco Biçim dizgisini ayrıştırılamıyor Yanıtımı güncelledim herhangi bir diziyi yüklemeye geçirmeden bir varyantı dahil etmek. –

İlgili konular