objective-c - iOS 基于 Cotains 的谓词搜索仅在找到完全匹配时返回

标签 objective-c ios search contains predicate

我正在将一个搜索栏添加到我的 iOS 应用程序的 TableView 组件中,该组件允许搜索由字典组成的 NSArray。不过,搜索栏并不总是有效 - 如果我的数据完全匹配,但不是部分匹配,它会成功打印出结果。例如,如果输入了确切的短语,它会打印出“Turn off a light”作为结果,但如果只输入“Turn”则不会。然而,在仅由字符串组成的调试数组上,搜索功能完全按照预期工作。

我的谓词代码在这里:

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

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

self.searchResults = [allSearchableItems filteredArrayUsingPredicate:resultPredicate];

}

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

- (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”正确打印并更新,但是在第一个 block 中,NSArray“searchResults”仅在输入精确匹配时返回结果。我在这里完全不知所措,因此非常感谢任何帮助/建议。

最佳答案

因为您正在对象中搜索字符串,所以我认为您只需要在谓词中深入挖掘即可。对象内的字符串只是该对象的部分匹配。当您在谓词中使用 SELF 时,您指定在对象本身内进行搜索,在您的例子中是一个 NSDictionary。 NSDictionary 中的字符串字段本质上是对象中的对象。因此,如果您要在字典中查找名为“Name”的字段,则不应在 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];

}

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

希望这会有所帮助!

关于objective-c - iOS 基于 Cotains 的谓词搜索仅在找到完全匹配时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7578281/

相关文章:

ios - HKTextview表情符号检测

python - pygraphviz:使用后继查找最大等级节点

ios - UICollectionView:重新加载数据调用 numberOfItemsInSection 但不是 cellForItemAtIndexPath

objective-c - 如何将具有浮点值的数组保存到 Mac 可读的文本文件中?

ios - 如何在 UICollectionView 之上呈现 UIViewController?

ios - 是否可以在 ViewController 文件之外设置约束和对象?

javascript - 在 ReactJS 中使用搜索框时如何显示来自 API 的信息?

algorithm - Google Reader 如何从网页中提取新闻条目?

objective-c - 什么时候应该在 Objective C 类上使用前缀?

objective-c - Xcode iphone 模拟器没有运行 Retina?