gpt4 book ai didi

ios - NSPredicate 在 NSArray 上搜索任何对象

转载 作者:技术小花猫 更新时间:2023-10-29 10:44:58 24 4
gpt4 key购买 nike

我有一个包含名称、地址、电话的对象数组。编号等

我希望能够在数组中搜索任何出现的术语 - 无论是在名称字段、地址字段等中。

我有这样的想法:

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
// Update the filtered array based on the search text and scope.
// Remove all objects from the filtered search array


[self.searchResults removeAllObjects];
// Filter the array using NSPredicate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchText];
searchResults = [NSMutableArray arrayWithArray:[contactArray filteredArrayUsingPredicate:predicate]];
}

这会导致异常“无法将 in/contains 运算符用于集合”。

更新。我现在最多可以搜索三个字段。当我添加第四个(以任何顺序)时,我得到这个异常:“无法解析格式字符串......”

谓词代码现在是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.narrative contains[c] %@ OR SELF.category contains[c] %@ OR SELF.date contains[c] OR SELF.name contains[c] %@", searchText, searchText, searchText, searchText];

searchResults = [NSMutableArray arrayWithArray:[allDreams filteredArrayUsingPredicate:predicate]];

三个是谓词搜索字段的限制吗?我该如何解决这个问题?再次感谢。

最佳答案

只需使用一个谓词字符串来检查它们:

@"name contains[cd] %@ OR address contains[cd] %@"

你想加多少就加多少。

唯一的缺点是您需要为每个要测试的字段添加相同的搜索字符串,这看起来有点难看。

如果您的对象是字典,那么有一种方法可以使用子查询真正搜索所有值而不必在编译时知道它们的名称。

它是这样工作的:

@"subquery(self.@allValues, $av, $av contains %@).@count > 0"

它为字典对象使用 @allValues 特殊键(或方法调用,如果您愿意),并使用它来过滤包含您的搜索字符串的任何值。如果找到任何对象(即计数为正),则该对象将包含在结果中。

请注意,这将不加区别地检查所有值,即使是那些您不想包含在字典中的值。

关于ios - NSPredicate 在 NSArray 上搜索任何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com