2016-04-05 2 views
0

J'ai un NSArray contenant JSON chaîne comme ci-dessous. Je veux trouver des index d'objets ayant la valeur "plet" sous la clé "title". Quand je viens d'utiliser simplement NSPredicate ci-dessous, il a retourné tous les objets, car tous les objets JSON ayant des piqûres "isCompleted" en tant que clé.filtrage JSON stings tableau avec NSPredicate et expression régulière

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

Je ne veux pas convertir JSON pour objet NSDictionary. Et je n'utilise pas [NSPredicate predicateWithBlock:], parce que je vais appliquer ce prédicat à NSFetchedResultsController. Selon le document, NSPredicate qui est créé par [NSPredicate predicateWithBlock:] ne peut pas être utilisé pour NSFetchedResultsController. Donc, ma question est, puis-je utiliser l'expression régulière pour résoudre ce problème? Je ne sais pas grand-chose sur l'expression régulière. Quelqu'un pourrait-il donner un exemple pour cela?

+0

Pourquoi ne pas les convertir en objets appropriés, puis enregistrer des objets dans le CoreData, après quoi vous pourrez utiliser le prédicat avec la propriété directement? – ogres

Répondre

0

Vous pouvez utiliser la méthode predicateWithBlock pour créer votre prédicat. Dans le bloc, vérifiez si dynamicVale contient la valeur à rechercher.

code:

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

Copié de réponse JhonyKutties. Profitez du codage :)