2012-08-01 55 views
1

我有一个UISearchDisplay控制器设置,它正在过滤值,但我想知道是否有人可以帮我用一点点高级的方式来过滤结果。以特定的方式搜索NSArray的子​​字符串

说我的数组是: {美国的榜样,埃里克,不同-埃里克}

如果用户搜索“惠理”,结果应该是 {埃里克不同,埃里克} 因为是应该只返回结果是一个单词以子串开始,而不是如果它在单词的中心(美国)。

它还应该检查' - '是否可以是''和visaversa。所以子字符串'Different-Eri'也会搜索子字符串'Different Eri',反之亦然。

如果您需要更多的解释,我会很乐意回答。我只是想知道是否有一个好办法去做这件事。

当前代码:

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

    searchResults = [[birdsArray filteredArrayUsingPredicate:resultPredicate] mutableCopy]; 

回答

0

我确实使一些改变,我的自定义对象和搜索谓词解决了这个。比我以前想的要简单得多。

在我的自定义对象中,我做了2个属性,并且让Getters方法分别返回'名字'和'姓氏',它们基本上将整个字符串分解为第一个单词和最后一个单词,使用''或' - '作为词语排除者。

我的搜索谓词简直就成了:

NSPredicate *spacePredicate = [NSPredicate 
            predicateWithFormat:@"SELF.comname BEGINSWITH[cd] %@ OR SELF.lastname BEGINSWITH[cd] %@", 
            searchText, searchText]; 

    searchResults = [[birdsArray filteredArrayUsingPredicate:spacePredicate] mutableCopy]; 

我用“BEGINSWITH”而不是包含以确保单词的开始相匹配的字符串。

结束:),希望它有助于某人。