我正在构建一个复合NSPredicate,以便在iOS应用中使用sqlite上的核心数据进行获取请求。一切都已经正常,但我无法包括最后一个条件。原因很简单:我需要检查存储为字符串的值是否在某些浮点范围内。问题是条件是按字母顺序检查的,而不是根据其浮点值。这是代码:
NSString * conditionToBeAdded = [NSString stringWithFormat:@" && (%@ >= \"""%@\""") && (%@ <= \"""%@\""")", propertyName, myMinFloat, propertyName, myMaxFloat];
stringForPredicate = [stringForPredicate stringByAppendingString:conditionToBeAdded];
NSPredicate * myPredicate = [NSPredicate predicateWithFormat:stringForPredicate];
是否有人知道如何构建能够将字符串值检查为数字的NSPredicate对象,以便在coredata请求中使用?
谢谢。
答案 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;字符串比较。我怀疑谓词中的所有引号都会丢掉。谓词中不需要引号,除非您设置的是常量,在这种情况下您不是。删除它们并再试一次。