使用谓词将 Json 数组中的值与双精度值进行比较

Using a predicate to compare a value from a Json Array with a double

我正在尝试用双精度过滤 json 数组的字典字段。只需通过:

double maxDistance=0.0003;
NSPredicate* nearPredicate=[NSPredicate predicateWithFormat:@"Distance < %ld", maxDistance];
[jsonCloudArray filterUsingPredicate:nearPredicate];

产生崩溃:

-[__NSCFNumber length]: unrecognized selector sent to instance 0x15e0398f0

如果我改用我在 Whosebug 上找到的示例代码:

NSLog(@"arrival %@", jsonCloudArray);
NSPredicate *nearPredicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary *dictionary, NSDictionary *bindings)  {
     NSNumber *idNumber = dictionary[@"Distance"];
     BOOL result= [idNumber doubleValue] < maxDistance;
     NSLog(@"processing distance %f", [idNumber doubleValue]);
     return result;
}];
[jsonCloudArray filterUsingPredicate:nearPredicate];

我在处理完数组的所有元素后发生静默崩溃,正如我通过比较两个 NSLog 所看到的那样。

可能是什么问题?

有趣的是,使用 filteredArrayUsingPredicate 如:

double maxDistance=0.0003;
NSLog(@"arriva %@", jsonCloudArray);
NSPredicate *nearPredicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary *dictionary, NSDictionary *bindings) {
    NSNumber *idNumber = dictionary[@"Distance"];
    BOOL result= [idNumber doubleValue] < maxDistance;
    NSLog(@"processing distance %f", [idNumber doubleValue]);
    return result;
}];
jsonCloudArray  = [[jsonCloudArray filteredArrayUsingPredicate:nearPredicate] mutableCopy];

我再也没有崩溃了。