2016-04-05 15 views
0

Aşağıda gibi JSON dizesi içeren bir NSArray var.JSPredicate ve düzenli ifade ile JSON sokmaları dizisini filtrelemek

[ 
    { 
     "title":"find good book", 
     "isCompleted":true 
    }, 
    { 
     "title":"complete work", 
     "isCompleted":false 
    }, 
    { 
     "title":"check schedule", 
     "isCompleted":false 
    } 
] 

"Başlık" anahtarının altında "plet" değeri olan nesnelerin dizinlerini bulmak istiyorum. Sadece NSPredicate'un altında kullanıldığında, her nesne döndü, çünkü her bir "0Comchleted" soketine sahip olan her JSON nesnesi anahtar olarak.

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", @"plet"]; 

Ben NSDictionary nesneye JSON dönüştürmek istemiyoruz. Ve ben NSFetchedResultsController için bu yüklemi uygulamak için gidiyorum çünkü [NSPredicate predicateWithBlock:] kullanmayın. Belgeye göre, [NSPredicate predicateWithBlock:] tarafından oluşturulan NSPredicate, NSFetchedResultsController için kullanılamaz.

Benim sorum şu, bu sorunu çözmek için Normal ifadeyi kullanabilir miyim? Düzenli ifade hakkında fazla bir şey bilmiyorum. Bunun için örnek verebilir misiniz?

+0

Neden onları uygun nesnelere dönüştürmeyin ve sonra nesneleri CoreData içine kaydetmeyin, daha sonra doğrudan mülk ile yüklemeyi kullanabileceksiniz? – ogres

cevap

0

Yüklemenizi oluşturmak için predicateWithBlock yöntemini kullanabilirsiniz. Bloğun içinde, dynamicVale'in aranacak değeri içerdiğini kontrol edin.

Kodu: JhonyKutties cevap kopyalanan

NSArray *yourArray = ....; 
NSString *searchText = ...; 

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary * _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) { 
    NSArray *dynamicVales = [evaluatedObject valueForKeyPath: @"dynamicVales.value"]; 
    return [dynamicVales containsObject:searchText]; 

}]; 

NSArray *filteredArray = [yourArray filteredArrayUsingPredicate:predicate]; 

. Kodlamanın keyfini çıkarın :)