NSPredicate数组包含问题

时间:2011-08-26 16:02:38

标签: ios cocoa-touch search nspredicate contains

  

可能重复:
  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的行,也会返回一个空数组。

我是否错误地使用“包含”?

2 个答案:

答案 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]也可能是一个好主意。