我正在实现一个搜索栏,用户可以在其中输入一个字符串来过滤视图中显示的项目。每个被显示的对象都有一个到多个关键词的关系,我希望能够根据它们的关键词来过滤对象。每个关键词对象都有一个名称属性,因此我已经设置了一个NSPredicate来进行过滤,它看起来像这样:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];
这段代码运行良好,但问题是搜索区分大小写,如果关键字有大写字母但用户输入全小写,则找不到匹配项。我尝试了以下修改:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];
但是这并不影响匹配的大小写敏感性。有没有一种方法可以使用普通谓词进行不区分大小写的匹配?或者我需要在关键字类上实现某种自定义访问器,例如编写一个lowercaseName
方法并针对搜索字符串的小写版本进行匹配?
补充说明:进一步探索后,添加自定义访问器的解决方法对于手动使用NSPredicate可以正常工作,但在使用Core Data的NSFetchRequest查询属性时根本不起作用,该查询仅适用于在Core Data模型中定义的属性。