1

我有一个 UISearchDisplay 控制器设置,它正在过滤值,但我想知道是否有人可以帮助我用更高级的方式过滤结果。

假设我的数组是:{ American example, Eric, Different-Eric }

如果用户搜索“Eri”,结果应该是 { Eric, Different-Eric } 因为它应该只返回单词以子字符串开头的结果,而不是它在单词的中心(美国)。

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

如果您需要更多说明,我很乐意回答。我只是想知道是否有一个好的方法来解决这个问题。

当前代码:

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

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

1 回答 1

0

实际上,我通过对自定义对象和搜索谓词进行一些更改来解决这个问题。解决方案比我以前想象的要简单得多。

在我的自定义对象中,我创建了 2 个属性,并让 Getters 方法分别返回“名字”和“姓氏”,这基本上将完整的字符串分解为第一个单词和最后一个单词,使用“”或“-”作为单词分隔符。

我的搜索谓词简单地变成了:

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

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

我使用 'BEGINSWITH' 而不是 contains 来确保单词的开头与子字符串匹配。

结束:),希望它对某人有所帮助。

于 2012-08-01T18:04:43.903 回答