如果在NSPredicate中使用OR,则无法成功过滤结果

时间:2018-06-05 07:19:30

标签: ios objective-c nspredicate

我有一个NSArray&我试图根据下面提到的查询过滤结果:

self->filteredValues =
        [self->AllValues filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.sku contains[cd]%@",text]];

如果我单独使用SELF.sku或SELF.name,我可以成功过滤结果。

问题是当我在这样的查询之间使用OR时,我得到了崩溃结果:

 self->filteredValues =
        [self->AllValues filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF.sku contains[cd]%@) OR (SELF.name contains[cd]%@)",text]];
  

错误:2018-06-05 12:39:55.137706 + 0530 AppName [43371:14206450] ***   由于未捕获的异常而终止应用程序   ' NSInvalidArgumentException',原因:'无法寻找价值   字符串中的()(24" NOBLE WREATH(6));   value不是字符串'

如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

谓词中缺少第二个参数。

self->filteredValues =
    [self->AllValues filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF.sku contains[cd]%@) OR (SELF.name contains[cd]%@)",text, <#second argument#>]];

在谓词中设置<#second argument#>

答案 1 :(得分:1)

检查谓词的格式字符串。您有两个%@占位符,但只有一个参数提供了值。

我打赌这会解决问题:

[NSPredicate predicateWithFormat:@"(SELF.sku contains[cd]%@) OR (SELF.name contains[cd]%@)", text, text]