NSPredicate 的 like 用法

刚才遇到一个有意思的问题,NSPredicate为什么使用like进行条件匹配时无法识别出结果。

研究一番获得解决方法,记录在这里:

首先NSPredicate初始化时候,使用的Format的语句,并不是标准的NSString,所以其中的%@和%k,是NSPredicate特殊定义的含义,与通常意义的NSString并不一致。

所以很多人下意识可能会写出如下语句:

[NSPredicate predicateWithFormat:@"%k like[cd] %@ ", Attri_Name, keyword];

但是这种查询会直接崩溃,当你上网搜索一下,可能会改进一下,写出下面的条件查询。

[NSPredicate predicateWithFormat:@"%k like[cd] '*%@*' ", Attri_Name, keyword];

这种情况下,运行正常,但你会发现匹配不到结果。

其实,我们需要这么做:

NSString *key = [NSString stringWithFormat:@"*%@*",keyword];
[NSPredicate predicateWithFormat:@"%k like[cd] %@ ", Attri_Name, key];

也就是说,你需要直接将查询的限定条件,以一个字符串的对象传给NSPredicate才能解析,而不能指望NSPredicate给你处理。

NSPredicate的Like,一般适合用于使用?号来匹配精确的前后置字符数量条件,像上面这种前后*的条件,其实可以直接使用CONTAINS查询替换。

1 Comment

  1. xing1982

    不错不错!内容感觉好极了!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注