ios - NSPredicate 和过滤

标签 ios nsmutablearray nspredicate

我有一个名为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/

相关文章:

ios - 将 SpriteKit 添加到空应用程序

ios - 如果 UITextField 密码字段的内容超过特定长度,应用程序会挂起

ios - 如何在 iPad Air2 iOS9.2 的某些 ViewController 上强制屏幕方向?

ios - 在第 8 行之后插入新对象,应用程序在使用 NSMutableArray 滚动时崩溃

ios - 如何使用谓词按字段执行查询?

iphone - 对象没有从 NSMutableArray 中删除?

ios - Nsmutablearray 在访问时损坏

ios - 尝试释放 NSMutableArray 时出现泄漏

ios - NSPredicate 嵌套子查询编译失败(核心数据)

ios - NSPredicate 没有响应