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

Unable to filter results successfully if using OR inside 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]];

Error : 2018-06-05 12:39:55.137706+0530 AppName[43371:14206450] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't look for value () in string (24" NOBLE WREATH (6)); value is not a string '

如何解决这个问题。

谓词中缺少第二个参数。

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

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

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

我打赌这会解决问题:

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