我想使用查询字符串在名字或姓氏上搜索一组用户。下面是谓词,但我得到了一个例外。
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
答案 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];