【发布时间】:2012-01-16 11:23:02
【问题描述】:
我正在构建一个复合 NSPredicate 以在 iOS 应用程序中使用 sqlite 上的核心数据发出获取请求。一切都已经很好了,但我无法包括最后一个条件。原因很简单:我需要检查存储为字符串的值是否在特定的浮点范围内。问题是条件是按字母顺序检查的,而不是根据它的浮点值。这是代码:
NSString * conditionToBeAdded = [NSString stringWithFormat:@" && (%@ >= \"""%@\""") && (%@ <= \"""%@\""")", propertyName, myMinFloat, propertyName, myMaxFloat];
stringForPredicate = [stringForPredicate stringByAppendingString:conditionToBeAdded];
NSPredicate * myPredicate = [NSPredicate predicateWithFormat:stringForPredicate];
有人知道如何构建一个 NSPredicate 对象,该对象能够将字符串值检查为数字,以在 coredata 请求中使用吗?
谢谢。
【问题讨论】:
-
你过滤什么样的对象?是否有可能反过来并在您的对象上创建一个只读属性,将字符串转换为 NSNumber?这样,您就可以完全控制存储的字符串不包含有效数字的情况。
-
它是应用程序的模型,它包含所有数据。这些对象有很多属性,(名称、地址、价格等)都是 NSString。到目前为止,我通过在没有此条件的情况下执行提取并过滤数组来解决,但它有点慢。我尝试了你的解决方案,它不起作用,因为它在模型实体定义中找不到属性,这是一个很好的点,但我需要再次定义我的模型,创建 mom 文件,生成类,然后重新导入我猜是所有数据
-
您可以使用自定义类来支持您的实体,该类基本上只添加只读属性。这可能会导致数据模型的新版本,因此需要数据迁移,这应该是可行的,因为数据模型的两个版本仅在添加自定义类方面有所不同。只要您有新旧版本的数据模型可用,自动迁移应该能够解决这个问题。
-
这也很有趣,可以考虑用于未来的应用程序。这次我算出来了,大概我们可以肯定,不可能建立这样一个谓词,不是吗?还是谢谢你。
标签: ios xcode core-data nspredicate