我有一个名为comboData的NSMutableArray
,我正在尝试过滤掉它:
NSMutableArray * filteredVersion = [[NSMutableArray alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id >= %d AND id <= %d",1,7];
[filteredVersion setArray: [comboData filteredArrayUsingPredicate:
predicate]
];
我收到未知选择器
错误消息
[__NSCFNumber length]: unrecognized selector sent to instance 0xa966350
在第二行。 我(再次)错过了什么?
[编辑]
comboData如下(在调试区域打印出来)
combo data (
{
id = 1;
label = "A";
name = '';
},
{
id = 2;
label = "B";
name = '';
},
最佳答案
好的,所以您的数组 comboData
已填充 NSDictionaries
。
NSDictionary
只能包含对象。
看起来键 id
引用了一个数字,因此它将是一个 NSNumber
。
在您的谓词中,您将其视为 int。
你将需要这样的东西......
// erm... not sure. Can you not just use a comparator?
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id >= %d AND id <= %d",1,7];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary *dictionary, NSDictionary *bindings) {
NSNumber *idNumber = dictionary[@"id"];
return [idNumber intValue] >= 1 && [idNumber intValue] <= 7;
}];
这应该有效。
只需使用它来代替当前的谓词。
关于ios - NSPredicate 和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138592/