可能重复:
Searching/Filtering a custom class array with a NSPredicate
我有一个包含自定义类对象的数组,我想基于其中一个类属性是否包含自定义字符串来过滤数组。我有一个方法,传递我想要搜索的属性(列)和它将搜索的字符串(searchString)。这是我的代码:
NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ contains %@", column, searchString];
NSMutableArray *temp = [displayProviders mutableCopy];
[displayProviders release];
displayProviders = [[temp filteredArrayUsingPredicate:query] mutableCopy];
[temp release];
由于某种原因,这总是返回一个空数组。四列中的三列是整数或双精度,因此我可以添加if语句以将searchString转换为数字(如果需要)。但是,即使搜索属性为字符串的属性,并且应该包含一些包含字符串searchString的行,也会返回一个空数组。
我是否错误地使用“包含”?
答案 0 :(得分:1)
为了在谓词中搜索字符串,我发现在我搜索的内容周围包装单引号效果最好并且使用contains[cd]
而不是contains
,如下所示([cd]位指定案例和变音符号不敏感搜索):
NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ contains[cd] '%@'", column, searchString];
使用Integers搜索列时,使用double equals也可以正常工作:
NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ == %@", column, searchString];
答案 1 :(得分:0)
我认为你的谓词应该是[NSPredicate predicateWithFormat: @"column contains %@", searchString]
现在的方式,你的谓词变为""column" contains "string""
,总是评估为假。
根据您的具体情况,使用contains[cd]
也可能是一个好主意。