objective-c – 对一对多关系的NSPredicate不区分大小写的匹配

objective-c – 对一对多关系的NSPredicate不区分大小写的匹配,第1张

概述我实现一个搜索字段,用户可以在其中键入一个字符串来过滤视图中显示的项目。每个正在显示的对象都有一个关键字对多关系,我希望能够根据对象的关键字过滤对象。每个关键字对象都有一个name属性,所以我设置了一个NSPredicate进行过滤,看起来像这样: NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name C 我实现一个搜索字段,用户可以在其中键入一个字符串来过滤视图中显示的项目。每个正在显示的对象都有一个关键字对多关系,我希望能够根据对象的关键字过滤对象。每个关键字对象都有一个name属性,所以我设置了一个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仅在查询Core Data模型中定义的属性时有效。

解决方法 如果我正确地理解你,只要任何关键字名称匹配搜索字符串,你就希望你的谓词成立。为此,您需要使用ANY关键字进行测试,如下所示:

[nspredicate predicateWithFormat:@"ANY keywords.name CONTAINS[c] %@",...];

这将搜索关键字,并返回true如果这些关键字名称包含您的搜索字符串。

总结

以上是内存溢出为你收集整理的objective-c – 对一对多关系的NSPredicate不区分大小写的匹配全部内容,希望文章能够帮你解决objective-c – 对一对多关系的NSPredicate不区分大小写的匹配所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1047690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存