NSPredicate:如何将字符串视为数字?

时间:2012-01-16 11:23:03

标签: ios xcode core-data nspredicate

我正在构建一个复合NSPredicate,以便在iOS应用中使用sqlite上的核心数据进行获取请求。一切都已经正常,但我无法包括最后一个条件。原因很简单:我需要检查存储为字符串的值是否在某些浮点范围内。问题是条件是按字母顺序检查的,而不是根据其浮点值。这是代码:

NSString * conditionToBeAdded = [NSString stringWithFormat:@" && (%@ >= \"""%@\""")  && (%@ <= \"""%@\""")", propertyName, myMinFloat, propertyName, myMaxFloat];
stringForPredicate = [stringForPredicate stringByAppendingString:conditionToBeAdded];  
NSPredicate * myPredicate = [NSPredicate predicateWithFormat:stringForPredicate];

是否有人知道如何构建能够将字符串值检查为数字的NSPredicate对象,以便在coredata请求中使用?

谢谢。

2 个答案:

答案 0 :(得分:5)

由于NSPredicates允许您使用与键值编码方法匹配的所有内容,因此您可以调用NSStrings方法,如:intValue或floatValue

NSString * conditionToBeAdded = [NSString stringWithFormat:@" && (propertyName.floatValue >= %f )  && (propertyName.floatValue <= %f)", myMinFloat, myMaxFloat];
stringForPredicate = [stringForPredicate stringByAppendingString:conditionToBeAdded];  
NSPredicate * myPredicate = [NSPredicate predicateWithFormat:stringForPredicate];

我希望有所帮助。

答案 1 :(得分:0)

您需要将该字符串更改为数字并正确修复。字符串搜索 SLOW ,应该避免。将数字放入字符串是一个很大的性能影响而没有收获。

至于你的实际谓词,你可以做一个&lt;或者&gt;字符串比较。我怀疑谓词中的所有引号都会丢掉。谓词中不需要引号,除非您设置的是常量,在这种情况下您不是。删除它们并再试一次。