NSPredicate:如何将string视为数字?
我正在构build一个复合NSPredicate,以在iOS应用程序中使用sqlite上的核心数据进行获取请求。 一切已经正常,但是我不能包括最后的条件。 原因很简单:我需要检查存储为string的值是否在某个浮点范围内。 问题在于条件是按照字母顺序来检查的,而不是根据它的浮点值。 这里是代码:
NSString * conditionToBeAdded = [NSString stringWithFormat:@" && (%@ >= \"""%@\""") && (%@ <= \"""%@\""")", propertyName, myMinFloat, propertyName, myMaxFloat]; stringForPredicate = [stringForPredicate stringByAppendingString:conditionToBeAdded]; NSPredicate * myPredicate = [NSPredicate predicateWithFormat:stringForPredicate];
有谁知道如何构build一个NSPredicate对象,能够将string值检查为数字,以便在coredata请求中使用?
谢谢。
由于NSPredicates允许您使用与Key-Value Coding方法匹配的所有内容,您可以调用NSStrings方法,如:intValue或floatValue
NSString * conditionToBeAdded = [NSString stringWithFormat:@" && (propertyName.floatValue >= %f ) && (propertyName.floatValue <= %f)", myMinFloat, myMaxFloat]; stringForPredicate = [stringForPredicate stringByAppendingString:conditionToBeAdded]; NSPredicate * myPredicate = [NSPredicate predicateWithFormat:stringForPredicate];
我希望有帮助。
您将需要将该string更改为一个数字,并正确地修复它。 stringsearch很慢 ,应该避免。 把数字string是一个巨大的性能打击没有收益。
至于你的实际谓词,你可以对string进行比较。 我怀疑你在谓词中的所有引号正在抛弃。 引号在谓词中是不需要的,除非你设置一个常量,在这种情况下你不是。 删除它们,然后再试一次。
- 在应用程序运行时replace核心数据sqlite文件,数据不会更新
- NSManagedObjectContext executeFetchRequest返回不稳定的对象,导致EXC_BAD_ACCESS,SIGABRT等
- 如何将来自Core Data,iOS dev的结果进行分组
- 核心数据不支持所有和IN谓词
- 核心数据与iClouddevise
- 核心数据的预填充版本?
- CoreData:错误:(14)数据库的I / O错误
- 大型数据库 – 在设备上显示数据的最佳方式?
- 将SQL存储添加到NSPersistentStoreCoordinator时如何debugging/处理间歇性的“授权被拒绝”和“磁盘I / O”错误?