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