filteredArrayUsingPredicate使用可变数组填充数组

时间:2014-06-13 15:25:25

标签: ios objective-c

我在这行代码中发生了运行时错误:

_searchresults = [_beerNames filteredArrayUsingPredicate:resultPredicate];

serchresuls是一个NSArray(零个对象) beerNames是NSArray M(196个对象) 结果谓词是一个NS比较谓词,我真的不明白这意味着什么 这是我的结果谓词的代码

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];

和searchText是一个NSCF字符串,但在程序崩溃之前它只填充一个字母。

它给我的错误是:

NSCFString 0x8cbce80> valueForUndefinedKey:]:此类不是密钥值的密钥值编码。

有关正在发生的事情的任何想法?

2 个答案:

答案 0 :(得分:1)

我为你写了一个简单的例子:     人* a = [人新];     a.name = @“a”;     a.number = @“200”;     a.age = 31;

Person *b = [Person new];
b.name = @"b";
b.number = @"300";
b.age = 21;

Person *c = [Person new];
c.name = @"c";
c.number = @"100";
c.age = 11;

NSArray *arr = @[a,b,c];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name like[cd] %@) AND (age > %i)",@"b", 10];
arr  = [arr filteredArrayUsingPredicate:predicate];

玩它。 对于谓词的语法,您可以在这里查看: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-CJBDBHCB

例如,在我的例子中,cd意味着它的情况和变音不敏感就像。“

答案 1 :(得分:1)

如果_beerNames是包含具有“name”属性的对象的数组,则谓词将起作用。但是你有一个字符串数组,因此谓词应该是

[NSPredicate predicateWithFormat:@"self CONTAINS[c] %@", searchText]

(用“self”代替“name”)。