2011-08-26 102 views
2

可能重复:
Searching/Filtering a custom class array with a NSPredicateNSPredicate数组包含问题

我有一个包含自定义类的对象数组,我想如果一个基于阵列筛选类属性包含一个自定义字符串。我有一个方法传递了我想要搜索的属性(列)和它将搜索的字符串(searchString)。这里是我的代码有:

NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ contains %@", column,  searchString]; 
NSMutableArray *temp = [displayProviders mutableCopy]; 
[displayProviders release]; 
displayProviders = [[temp filteredArrayUsingPredicate:query] mutableCopy]; 
[temp release]; 

出于某种原因,这总是返回一个空数组。四列中的三列是整数或双精度,所以如果需要,我可以添加一个if语句将searchString转换为数字。但是,即使搜索属性是字符串,并且应该有一些包含字符串searchString的行,也会返回一个空数组。

我是否使用“contains”不正确?

回答

1

搜索谓词中的字符串,我发现周围包裹我正在寻找最好的作品,并使用contains[cd]而不是contains像下面(的[CD]位指定的情况下&变音不区分大小写搜索)单引号:

NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ contains[cd] '%@'", column, searchString]; 

用于搜索与整数列,使用双等于应太细:

NSPredicate *query = [NSPredicate predicateWithFormat:@"%@ == %@", column, searchString]; 
0

我觉得你的谓语应该是[NSPredicate predicateWithFormat: @"column contains %@", searchString]

现在,你的谓词变成""column" contains "string"",它总是评估为false。

使用contains[cd]也可能是一个好主意,具体取决于你的情况。