如何向NSPredicate添加多个字段

时间:2014-01-08 19:15:48

标签: ios objective-c nspredicate

我想使用查询字符串在名字或姓氏上搜索一组用户。下面是谓词,但我得到了一个例外。

NSPredicate *sortingPred = [NSPredicate predicateWithFormat:@"(User.first contains[c] %@) OR (User.last contains[c] %@)", keyword, keyword];

例外:

exception   NSException *   name:@"NSUnknownKeyException" reason:@"[<User 0x12911980> valueForUndefinedKey:]: this class is not key value coding-compliant for the key User."   0x13653620

1 个答案:

答案 0 :(得分:10)

您不得在谓词中包含实体名称,只能包含(或键路径):

[NSPredicate predicateWithFormat:@"(first CONTAINS[c] %@) OR (last CONTAINS[c] %@)", keyword, keyword]

更新: “FIRST”和“LAST”在谓词中有特殊含义,他们习惯于 指定数组中的第一个或最后一个元素(参见“谓词编程指南”中的Aggregate Operations)。

使用%K格式扩展属性键可以避免这种不明确性:

[NSPredicate predicateWithFormat:@"(%K CONTAINS[c] %@) OR (%K CONTAINS[c] %@)",
                                   @"first", keyword, @"last", keyword];