Нет результата при поиске в NSArray NSDictionaries с использованием NSPredicate - PullRequest
1 голос
/ 22 ноября 2010

Эй, у меня есть массив NSDictionaries (например, [tempArray addObject:[[[NSMutableDictionary alloc] initWithObjects:someArray forKeys:keys] autorelease]];), и когда я пытаюсь найти его с помощью NSPredicate, он продолжает давать мне «Нет результатов».(TempArray становится self.patientList)

У меня нет предупреждений или ошибок во время компиляции, и если я NSLog([self.filteredArray count]);, то он также возвращает 0.

Вот мой соответствующий код:

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

self.patientList и self.filteredArray являются типами NSMutableArray и NSArray соответственно (изменение self.filteredArray на NSMutableArray не помогает).

Я пытался использовать == вместо Содержит также,Использование @"SELF contains[cd] %@" возвращает элемент только тогда, когда набран полный элемент (т. Е. Если ключ 'name' равен @ "Bob", то, если я наберу Bob, он отобразит его, но не когда я наберу Bo или ob).

Я действительно озадачен этим.

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 22 ноября 2010

Видимо, первое - зарезервированное слово при использовании предикатов. Из документации Apple:

Зарезервированы следующие слова:

И, ИЛИ, В, НЕ, ВСЕ, ЛЮБОЕ, НЕКОТОРЫЕ, NONE, LIKE, CASEINSENSITIVE, CI, СПИЧКИ, СОДЕРЖИТ, НАЧИНАЕТСЯ, ENDSWITH, МЕЖДУ, NULL, NIL, SELF, TRUE, YES, FALSE, NO, FIRST , LAST, РАЗМЕР, ЛЮБОЙ, ПОДПИСЬ, АКТЕРЫ, TRUEPREDICATE, FALSEPREDICATE

Просто измените свой ключ на что-то другое, возможно, firstName, и он будет работать.

0 голосов
/ 22 ноября 2010

На первый взгляд кажется правильным.Итак, действительно ли в ваших словарях есть ключ с именем first?И если они это сделают, это точно соответствует случаю?

0 голосов
/ 22 ноября 2010

Вместо этого вы можете использовать «лайк»:

first like[c] *%@*
...