0

我有一个NSMutableArray名为 comboData 我试图过滤掉它:

  NSMutableArray * filteredVersion = [[NSMutableArray alloc] init];
  NSPredicate    *predicate        = [NSPredicate predicateWithFormat:@"id >= %d AND id <= %d",1,7];
  [filteredVersion setArray: [comboData filteredArrayUsingPredicate:
                          predicate]
                        ];

我收到一条unknown selector错误消息

  [__NSCFNumber length]: unrecognized selector sent to instance 0xa966350

在第二行。我(重新)错过了什么?

[编辑]

comboData 如下(在调试区打印出来)

combo data (
    {
    id = 1;
    label = "A";
    name = '';

},
    {
    id = 2;
    label = "B";
    name = '';

},
4

1 回答 1

1

好的,所以你的数组comboData充满了NSDictionaries.

AnNSDictionary只能包含对象。

看起来键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;
}];

这应该有效。

只需使用它而不是您当前的谓词。

于 2013-10-02T15:32:29.020 回答