2010-11-22 27 views
1

Hey, J'ai un tableau de NSDictionaries (par exemple [tempArray addObject:[[[NSMutableDictionary alloc] initWithObjects:someArray forKeys:keys] autorelease]];) et quand j'essaie de le chercher avec NSPredicate il continue à me donner 'No Results'. (TempArray devient self.patientList)Aucun résultat lors de la recherche dans un NSArray de NSDictionaries utilisant NSPredicate

Je n'ai pas d'avertissements ou d'erreurs au moment de la compilation, et si NSLog([self.filteredArray count]); alors il renvoie 0 également.

Voici mon code correspondant:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(first contains[cd] %@)", self.searchBar.text]; 
self.filteredArray = [self.patientList filteredArrayUsingPredicate:predicate]; 
return [self.filteredArray count]; 

self.patientList et self.filteredArray sont les types NSMutableArray et NSArray respectivement (changement self.filteredArray à NSMutableArray ne contribue pas).

J'ai essayé d'utiliser == à la place de contient aussi bien. L'utilisation de @"SELF contains[cd] %@" renvoie uniquement un élément lorsque l'élément complet est tapé (si la clé 'nom' est @ "Bob" alors si je tape Bob, il l'affichera, mais pas quand je tape Bo ou ob).

Je suis vraiment perplexe sur celui-ci.

Merci d'avance!

Répondre

2

Apparemment, il s'agit d'abord d'un mot réservé lors de l'utilisation de prédicats. De la documentation d'Apple:

Les mots suivants sont réservés:

ET, OU, EN, PAS, TOUT, TOUT, UN PEU, NONE, comme, CASEINSENSITIVE, CI, MATCHES, CONTIENT, BEGINSWITH, endsWith, ENTRE, NULL, NIL, AUTO, TRUE, OUI, FAUX, NON, PREMIER, DERNIER, TAILLE, ANYKEY, sous-requête, CAST, TRUEPREDICATE, FALSEPREDICATE

Il suffit de changer votre clé pour quelque chose d'autre, firstName peut-être, et cela fonctionnera.

+0

Merci tellement de! Juste changé cela et cela a fonctionné. Et juste une question, comment trier un tableau de dictionnaires par une clé? Merci – Fred

+0

De rien. Quand il s'agit de trier un tableau, il existe plusieurs méthodes disponibles, toutes commençant par sortedArray .... Si vous ne parvenez pas à savoir comment le faire, posez une nouvelle question ici sur StackOverflow. –

+0

'@ Robert' Mais comment sait-il quelle touche choisir? Je vais jeter un coup d'œil, merci. – Fred

0

Vous pouvez utiliser "comme" au lieu:

first like[c] *%@* 
0

À première vue, il semble correct. Alors, est-ce que vos dictionnaires ont une clé appelée first? Et si c'est le cas, cela correspond-il exactement à l'affaire?

+0

Si je fais 'NSLog (@ "% @", [[self.patientList objectAtIndex: 0] objectForKey: @ "premier"]); 'au même endroit (numberOfRowsInSection :) alors il donne' Frederick '. Le tableau 'keys' ci-dessus est '\t NSArray * keys = [[[NSArray alloc] initWithObjects: @" premier ", @" dernier ", @" adresse ", @" numéro ", nil] autorelease];' – Fred