gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:27:29 24 4
gpt4 key购买 nike

我正在实现一个搜索字段,用户可以在其中输入一个字符串来过滤 View 中显示的项目。显示的每个对象都有一个 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 模型中定义的属性时有效。

最佳答案

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

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

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

关于objective-c - NSPredicate 对多对关系的不区分大小写匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1473973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com