我有一个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不是字符串'
如何解决这个问题。
答案 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]