首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多对多关系上的NSPredicate不区分大小写匹配

多对多关系上的NSPredicate不区分大小写匹配
EN

Stack Overflow用户
提问于 2009-09-24 20:28:58
回答 5查看 62.6K关注 0票数 71

我正在实现一个搜索域,用户可以在其中键入一个字符串来过滤视图中显示的项目。每个正在显示的对象都有一个keywords对多的关系,我希望能够根据它们的关键字来过滤对象。每个关键字对象都有一个name属性,所以我设置了一个NSPredicate来进行过滤,如下所示:

代码语言:javascript
复制
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];

这是可行的,但问题是搜索是区分大小写的,所以如果关键字有大写字母,但用户键入的都是小写,则找不到匹配项。我已经尝试了以下修改:

代码语言:javascript
复制
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];

但这对匹配的大小写敏感度没有任何影响。有没有办法只使用一个普通的谓词来完成这种不区分大小写的匹配呢?或者,我是否需要在关键字类上实现某种自定义访问器,例如,编写一个lowercaseName方法并与搜索字符串的小写版本进行匹配?

附录:经过进一步研究,添加自定义访问器的变通方法对于手动使用NSPredicate可以正常工作,但在将NSFetchRequest与核心数据一起使用时根本不起作用,只有在查询核心数据模型中定义的属性时才有效。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-04 02:58:04

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

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"ANY keywords.name CONTAINS[c] %@", ...];

这将搜索关键字,如果这些关键字名称中的任何一个包含您的搜索字符串,则返回true。

票数 93
EN

Stack Overflow用户

发布于 2009-10-20 14:00:32

我相信答案是:

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"keywords.name CONTAINS[cd] %@", self.searchString];

默认情况下,

字符串比较区分大小写和变音符号。您可以使用方括号中的关键字符c和d来修改运算符,以分别指定不区分大小写和不区分变音符号,例如firstName BEGINSWITHcd $FIRST_NAME。

Predicate Format String Syntax

票数 53
EN

Stack Overflow用户

发布于 2010-04-14 20:50:35

如果您试图仅捕获等号名称,但不区分大小写,我认为这是最好的解决方案

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"ANY keywords.name LIKE[c] %@", ...];

你帮了我很多。谢谢你们!

在我的例子中,我做到了:

代码语言:javascript
复制
[NSPredicate predicateWithFormat:@"ANY name LIKE[c] %@", @"teste"];
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1473973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档