【问题标题】:iOS Cotains-based Predicate search only returns when exact match foundiOS 基于 Cotains 的谓词搜索仅在找到完全匹配时返回
【发布时间】:2011-11-26 13:20:41
【问题描述】:

我正在向我的 iOS 应用程序的表格视图组件添加一个搜索栏,该组件允许通过由字典组成的 NSArray 进行搜索。但是,搜索栏并非一直有效 - 如果我的数据完全匹配,但不是部分匹配,它会成功打印出结果。例如,如果输入了确切的短语,它将打印出“关闭灯”作为结果,但如果只输入“转动”则不会。然而,在仅由字符串组成的调试数组上,搜索功能完全符合预期。

我的谓词代码在这里:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText];

self.searchResults = [allSearchableItems filteredArrayUsingPredicate:resultPredicate];

}

实际工作的测试块是这样写的:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText];

NSArray *array = [NSArray arrayWithObjects:@"Miguel", @"Ben", @"Adam", @"Melissa", nil];

NSArray *moreStuff = [array filteredArrayUsingPredicate:resultPredicate];

NSLog(@"%@", moreStuff);

self.searchResults = [allSearchableItems filteredArrayUsingPredicate:resultPredicate];

}

在上面的代码块中,NSArray "moreStuff" 打印出来并正确更新,但是在第一个块中,NSArray "searchResults" 仅在输入完全匹配时才返回结果。我在这里完全不知所措,因此非常感谢任何帮助/建议。

【问题讨论】:

    标签: objective-c ios search contains predicate


    【解决方案1】:

    因为您要在对象中搜索字符串,所以我认为您只需要更深入地挖掘谓词即可。对象中的字符串只是该对象的部分匹配。当您在谓词中使用 SELF 时,您指定在对象本身内搜索,在您的情况下是一个 NSDictionary。 NSDictionary 中的字符串字段本质上是对象中的对象。因此,如果您正在字典中查找名为“名称”的字段,而不是在 SELF 中查找谓词,它应该在 SELF.Name 中查找。您可以尝试以下代码来搜索 NSDictionary 的 Name 字段。

    - (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
    {
    
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF.Name CONTAINS[cd] %@", searchText];
    
    self.searchResults = [allSearchableItems filteredArrayUsingPredicate:resultPredicate];
    
    }
    

    如果您仍需要检查对象中包含的其他字段,您可以创建复合谓词。关于 Predicates 的详细信息可以在Apple's Predicate Programming Guide.找到。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多