我正在实现一个搜索字段,用户可以在其中输入字符串以过滤视图中显示的项目。每个显示的对象都有keywords
一对多的关系,我希望能够根据其关键字过滤对象。每个关键字对象都有一个name
属性,因此我设置了一个NSPredicate来进行如下所示的过滤:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];
此方法有效,但问题是搜索区分大小写,因此,如果关键字具有大写字母,但用户键入的全部为小写字母,则不会找到匹配项。我尝试了以下修改:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];
但这对匹配的大小写没有影响。有没有一种方法可以仅使用普通谓词来进行不区分大小写的匹配?还是我需要在关键字类上实现某种自定义访问器,例如编写一个lowercaseName
方法并与小写版本的搜索字符串进行匹配?
附录:经过进一步探索,添加自定义访问器的解决方法可以手动使用NSPredicate正常,但是在将NSFetchRequest与Core Data一起使用时根本不起作用,仅当查询Core Data模型中定义的属性时才有效。