我有一个表视图按人名属性显示行。表视图允许用户通过名称进行繁琐的搜索。例如如果用户输入'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];
但结果没有回来......请帮助我,谢谢!!
答案 0 :(得分: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];
}
答案 1 :(得分:0)
通过删除引号解决问题:MATCHES %@
而不是MATCHES '%@'
。