2010-11-22 10 views
1

Hey、 NSDictionariesの配列(例:[tempArray addObject:[[[NSMutableDictionary alloc] initWithObjects:someArray forKeys:keys] autorelease]];)があり、NSPredicateで検索しようとすると「No Results」が表示されます。 (TempArrayはself.patientListになります)NSPredicateを使用してNSDictionaryのNSArrayを検索すると結果が表示されます

コンパイル時の警告またはエラーはありません。また、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の(NSMutableArrayのにself.filteredArrayを変更しても解決しない)です。

私はcontainsの代わりに==を使ってみました。 @"SELF contains[cd] %@"を使用すると、アイテム全体が入力されたときにのみアイテムが返されます(キー 'name'が@ "Bob"の場合、Bobに入力すると表示されますが、Boまたはobを入力すると表示されません)。

私は本当にこの1つに困っています。

ありがとうございます!

答えて

2

明らかに、最初は述語を使用するときの予約語です。次の単語が予約されている

:アップルのドキュメントから

AND、OR、IN、NOT、ALL、ANY、SOME、 NONE、LIKE、CASEINSENSITIVE、CI、 MATCHES、CONTAINS、BEGINSWITH、 ENDSWITH、BETWEEN、NULL、NIL、SELF、 TRUE、YES、FALSE、NO、FIRST、LAST、 SIZE、AnyKeyでは、サブクエリ、CAST、 TRUEPREDICATE、FALSEPREDICATE

鍵を別のものに変更してください。おそらくfirstNameという名前になります。

+0

ありがとうそんなに!ちょうどこれを変更し、それは働いた。ちょうど質問ですが、どのように辞書の配列を1つのキーで並べ替えるのですか?ありがとうございました – Fred

+0

配列をソートする場合、sortedArrayで始まるいくつかのメソッドがあります。あなたがそれを行う方法を見つけることができない場合は、ここでStackOverflowで新しい質問をしてください。 –

+0

'@ Robert'しかし、どのキーをどのキーで並べ替えるべきかは分かりますか?私は周りを見て回りますが、ありがとう。 – Fred

0

あなたが代わりに "のように" 使用することができます。一見

first like[c] *%@* 
0

、それが正しいようです。それでは:あなたの辞書は実際にfirstと呼ばれるキーを持っていますか?そして、そうであれば、ケースに正確にマッチしますか?

+0

同じ場所(numberOfRowsInSection :)に「NSLog(@ "%@"、[[self.patientList objectAtIndex:0] objectForKey:@ "first"]);」を実行すると「Frederick」と表示されます。上記の 'keys'配列は '\t NSArray * keys = [[NSArray alloc] initWithObjects:@" first "、@" last "、@" address "、@" number "、nil] autorelease]; ' – Fred

関連する問題