如何向NSPredicate添加多个字段

Wil*_*con 2 objective-c nspredicate ios

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

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

例外:

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

Mar*_*n R 10

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

[NSPredicate predicateWithFormat:@"(first CONTAINS[c] %@) OR (last CONTAINS[c] %@)", keyword, keyword]
Run Code Online (Sandbox Code Playgroud)

更新: "FIRST"和"LAST"在谓词中具有特殊含义,它们用于指定数组中的第一个或最后一个元素(请参阅"谓词编程指南"中的聚合操作).

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

[NSPredicate predicateWithFormat:@"(%K CONTAINS[c] %@) OR (%K CONTAINS[c] %@)",
                                   @"first", keyword, @"last", keyword];
Run Code Online (Sandbox Code Playgroud)