Cocoa 在应用NSPredicate时强制转换NSDictionary值?

Cocoa 在应用NSPredicate时强制转换NSDictionary值?,cocoa,nsdictionary,nspredicate,Cocoa,Nsdictionary,Nspredicate,我有一个NSDictionary对象数组。 这些字典是从JSON文件解析的。 NSDictionary中的所有值对象都是NSString类型,其中一个键称为“distanceInMeters” 我曾计划使用NSPredicate筛选这些阵列,因此我开始时是这样的: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters <= %f)", newValue]; NSArray *newArra

我有一个NSDictionary对象数组。 这些字典是从JSON文件解析的。 NSDictionary中的所有值对象都是NSString类型,其中一个键称为“distanceInMeters”

我曾计划使用NSPredicate筛选这些阵列,因此我开始时是这样的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters <= %f)", newValue];
NSArray *newArray = [oldArray filteredArrayUsingPredicate:predicate];

NSPredicate*谓词=[NSPredicate谓词格式:@”(distanceInMeters您的问题不是谓词;您的问题是您处理的是
NSString
对象,而不是
NSNumber
对象。我会将时间集中在首先将它们更改为
NSNumbers
,然后验证它是否工作正常


仅供参考,系统会自动将数字解析为
NSNumbers
..

您的问题不是谓词;您的问题是您处理的是
NSString
对象,而不是
NSNumbers
对象。我会首先集中精力将它们更改为
NSNumbers
,然后验证它是否正确克林

仅供参考,将数字自动解析为
NSNumbers

请尝试以下操作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters.floatValue <= %f)", newValue];
NSPredicate*谓词=[NSPredicate predicateWithFormat:@](distanceInMeters.floatValue尝试以下操作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters.floatValue <= %f)", newValue];

NSPredicate*predicate=[NSPredicate-predicateWithFormat:@](distanceInMeters.floatValue嗨,谢谢,是的,我更喜欢处理正确的类型:)我查看了我正在使用的JSON库,它会扫描数字。然后我尝试了以下方法:BOOL theBool=[[dict objectForKey:@“distanceInMeters”]是类的一种:[NSString类]];NSLog(@“bool的值是%@\n”,(theBool?@“YES”:@“NO”);它返回是的,所以毫无疑问。我使用的是SBJSON,这可能是因为它根本不起作用吗?嗨,Dave,谢谢,是的,我更喜欢处理正确的类型:)我查看了我使用的JSON库,它会扫描数字。然后我尝试了这个:bool theBool=[[dict objectForKey:@“distanceInMeters”]是类:[NSString类]];NSLog(@“bool的值是%@\n”,(theBool?@“YES:@“NO”);它返回是的,所以毫无疑问。我使用的是SBJSON,这可能是因为它根本不起作用吗?嗨,荷马,谢谢你的帮助:)我不知道你可以这样键入cast,NSManagedObjects对我来说是新事物,NSPredicates:)再次感谢,它不是类型转换;它只是在NSString上调用“floatValue”方法。啊,谢谢,我明白了,它当然是直接访问属性,而不是访问器[NSString floatValue]:)不,它正在调用访问器。NSString没有“floatValue”“属性直接访问。通常,NSPredicate使用valueForKey:方法为每个点分隔的组件访问内容。valueForKey:使用访问器(如果可用),或直接访问ivar(不)。谓词语法使用点并不意味着它在使用属性。即使是,如果NSString具有“floatValue”属性,访问它将与调用[thatString floatValue]相同。这不适用于ints??尝试对nsstring属性执行谓词,但将其作为int进行比较。嗨,荷马,谢谢你做到了这一点:)我不知道你可以这样键入cast,NSPredicates对NSManagedObjects是我所不熟悉的任何其他内容:)再次感谢,这不是类型转换;它只是调用“floatValue”“NSString上的方法。啊,谢谢,我明白了,它当然是直接访问属性,而不是访问器[NSString floatValue]:)不,它正在调用访问器。NSString没有“floatValue”属性直接访问。通常,NSPredicate使用valueForKey:方法为每个点分隔的组件访问内容。valueForKey:使用访问器(如果可用),或直接访问ivar not。谓词语法使用点并不意味着它使用属性。即使是,如果NSString具有“floatValue”属性,访问该属性与调用[thatString floatValue]完全相同。这不适用于int??尝试对nsstring属性执行谓词,但将其作为int进行比较。