【发布时间】:2010-12-01 05:34:30
【问题描述】:
我正在实现一个搜索字段,用户可以在其中键入一个字符串来过滤视图中显示的项目。显示的每个对象都有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 模型中定义的属性时有效。
【问题讨论】:
标签: objective-c cocoa core-data