CoreData NSPredicate 数学故障

Posted

技术标签:

【中文标题】CoreData NSPredicate 数学故障【英文标题】:CoreData NSPredicate math malfunction 【发布时间】:2012-05-25 18:37:04 【问题描述】:

首先,这是我的第一个问题,请客气:)。

你们有没有注意到 NSPredicate 中奇怪的行为数学函数?

我的例子是:

1) 我有带接口的出发班:

@interface OTDeparture : NSManagedObject
@property (nonatomic, retain) NSNumber * position;
@end

2) 我使用谓词创建获取请求:

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"(position-1)*(position-1) > 0"];

结果总是零个对象(谓词总是 NO)。也格式化 "(2-1)*(2-1) > 0" 和 "(position-1)*position > 0" 做同样的事情。

这些谓词格式按预期工作(按预期返回对象):

"2*(position-1) > 0"
"2*2 > 0"
"position-3 > 0"

是我做错了什么,还是这真的是一个错误?我没有使用任何第三方的东西,只是 Apple 提供的代码。

【问题讨论】:

【参考方案1】:

似乎你是对的,CoreData 中有一些 :(( 我有同样的问题 - Is there any way to use NSPredicate to filter objects using distance calculation between points in CoreData 似乎接收你想要的东西的唯一方法是使用 predicateWithBlock: 方法,虽然我没有尝试过它自己呢。 请注意 predicateWithBlock: 仅适用于内存存储。所以很可能你最终会通过遍历所有实体来过滤数据,当然你可以在这样做之前尝试至少进行一些过滤。

【讨论】:

以上是关于CoreData NSPredicate 数学故障的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:基于关系的 NSPredicate

CoreData 和 NSPredicate

NSPredicate 中的 SQL ORDER BY 等价物 - CoreData

CoreData NSPredicate

CoreData 获取请求 NSPredicate 不起作用

NSPredicate,CoreData 中的空格。如何修剪谓词?