使用NSPredicate搜索NSDrary的NSArray时没有结果

时间:2010-11-22 05:05:00

标签: iphone nsarray nsdictionary nspredicate

嘿 我有一个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 个答案:

答案 0 :(得分:2)

使用谓词时,显然第一个是保留字。来自Apple的文档:

  

保留以下字样:

     

AND,OR,IN,NOT,ALL,ANY,SOME,   NONE,LIKE,CASEINSENSITIVE,CI,   比赛,包含,BEGINSWITH,   ENDSWITH,BETWEEN,NULL,NIL,SELF,   TRUE,YES,FALSE,NO, FIRST ,最后,   SIZE,ANYKEY,SUBQUERY,CAST,   TRUEPREDICATE,FALSEPREDICATE

只需将您的密钥更改为其他名称,也许是firstName,它会起作用。

答案 1 :(得分:0)

您可以使用“like”代替:

first like[c] *%@*

答案 2 :(得分:0)

乍一看,这似乎是正确的。那么:你的词典实际上有一个名为first的密钥吗?如果他们这样做,那么它与案件完全匹配吗?