使用 NSPredicate 搜索 NSDictionaries 的 NSArray 时没有结果
Posted
技术标签:
【中文标题】使用 NSPredicate 搜索 NSDictionaries 的 NSArray 时没有结果【英文标题】:No Result when searching through an NSArray of NSDictionaries using NSPredicate 【发布时间】:2010-11-22 05:05:00 【问题描述】:嘿,
我有一个 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 没有帮助)。
我也尝试过使用 == 而不是 contains。使用@"SELF contains[cd] %@"
仅在输入完整项目时返回一个项目(即,如果键“名称”是@“Bob”,那么如果我输入 Bob,它将显示它,但当我输入 Bo 或 ob 时不会显示)。
我真的被这个难住了。
提前致谢!
【问题讨论】:
【参考方案1】:显然 first 是使用谓词时的保留字。来自 Apple 的文档:
以下词语保留:
AND、OR、IN、NOT、ALL、ANY、SOME、 无,如,CASEINSENSITIVE,CI, 匹配,包含,开始, ENDSWITH、BETWEEN、NULL、NIL、SELF、 真,是,假,否,第一,最后, 大小、任意键、子查询、转换、 真预测,假预测
只需将您的密钥更改为其他名称,也许是名字,它就会起作用。
【讨论】:
非常感谢!只是改变了这一点,它的工作。只是一个问题,如何通过一个键对字典数组进行排序?谢谢 不客气。在对数组进行排序时,有几种方法可用,都以 sortedArray... 开头。如果您不知道怎么做,请在 *** 上提出一个新问题。@Robert
但是它怎么知道按哪个键排序呢?不过我会四处看看,谢谢。
啊,是的,我记得几年前发现了这个。【参考方案2】:
你可以改用“喜欢”:
first like[c] *%@*
【讨论】:
【参考方案3】:乍一看,这似乎是正确的。那么:你的字典真的有一个叫做first
的键吗?如果他们这样做,它是否完全符合案例?
【讨论】:
如果我在同一个地方做NSLog(@"%@",[[self.patientList objectAtIndex:0] objectForKey:@"first"]);
(numberOfRowsInSection:) 那么它会给出'Frederick'。上面的'keys'数组是` NSArray *keys = [[[NSArray alloc] initWithObjects:@"first",@"last",@"address",@"number",nil] autorelease];`以上是关于使用 NSPredicate 搜索 NSDictionaries 的 NSArray 时没有结果的主要内容,如果未能解决你的问题,请参考以下文章