【问题标题】:No Result when searching through an NSArray of NSDictionaries using NSPredicate使用 NSPredicate 搜索 NSDictionaries 的 NSArray 时没有结果
【发布时间】: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 时不会显示)。

我真的被这个难住了。

提前致谢!

【问题讨论】:

    标签: iphone nsarray nsdictionary nspredicate


    【解决方案1】:

    显然 first 是使用谓词时的保留字。来自 Apple 的文档:

    以下词语保留:

    AND、OR、IN、NOT、ALL、ANY、SOME、 无,如,CASEINSENSITIVE,CI, 匹配,包含,开始, ENDSWITH、BETWEEN、NULL、NIL、SELF、 真,是,假,否,第一,最后, 大小、任意键、子查询、转换、 真预测,假预测

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

    【讨论】:

    • 非常感谢!只是改变了这一点,它的工作。只是一个问题,如何通过一个键对字典数组进行排序?谢谢
    • 不客气。在对数组进行排序时,有几种方法可用,都以 sortedArray... 开头。如果您不知道怎么做,请在 StackOverflow 上提出一个新问题。
    • @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];`
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2017-01-31
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多