3

我有一个按人名属性显示行的表格视图。表格视图允许用户按名称进行繁琐的搜索。例如,如果用户键入“crp”,它将匹配名称“Chris Paul”。

我有一个方法,它需要一个搜索字符串并设置 NSPredicate 在数组中搜索模型的名称

- (void)setPredicateWithText: (NSString *)searchText
{

    for (int i = 0; i < searchText.length; i ++)
    {
        NSString *character = [searchText substringWithRange:NSMakeRange(i, 1)];
        self.format = [self.format stringByAppendingFormat:@".*%@",character];

        if (i == searchText.length -1) // last character
        {
          self.format = [self.format stringByAppendingString:@".*"];
        }
    }
    // result format == .*c.*r.*p.*
    self.searchPredicate = [NSPredicate predicateWithFormat:@"SELF.name MATCHES '%@'", self.format];
}

和其他方法:

 self.resultArray = [self.allPlayers filteredArrayUsingPredicate:self.searchPredicate];

但结果什么都没有回来......请帮助我,谢谢!

4

2 回答 2

5

问题解决了

您应该在代码中更改两件事,

1) 用 %@ 替换 '%@'

2) 添加 [c] 忽略大小写敏感


谓词应该是这样的

[NSPredicate predicateWithFormat:@"SELF.name MATCHES [c] %@", self.format];

最后的方法,

- (void)setPredicateWithText: (NSString *)searchText
{

    for (int i = 0; i < searchText.length; i ++)
    {
        NSString *character = [searchText substringWithRange:NSMakeRange(i, 1)];
        self.format = [self.format stringByAppendingFormat:@".*%@",character];

        if (i == searchText.length -1) // last character
        {
            self.format = [self.format stringByAppendingString:@".*"];
        }
    }
    // result format == .*c.*r.*p.*
    self.searchPredicate = [NSPredicate predicateWithFormat:@"SELF.name MATCHES [c] %@", self.format];
}
于 2013-05-10T08:31:07.677 回答
0

通过删除引号解决问题:MATCHES %@而不是MATCHES '%@'.

于 2013-05-10T04:05:27.857 回答