2

我有一个Comment拥有父实体的 CoreData 实体Measurement

Measurement实体有一个measurementDate属性 。

我的核心数据数据库中有 200Comment条记录,每条记录在measurementDate过去 3 年中都有不同的值。

我正在尝试获取measurementDate任何两个给定日期之间的记录。

首先,我尝试了这个:

//now fetch a record between 12 and 11 months ago
NSDate *startDate = [AppGlobals dateByAddingMonths:[NSDate date] withMonths:-12];
NSDate *endDate = [AppGlobals dateByAddingMonths:startDate withMonths:1];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(measurementDate >= %@) AND (measurementDate <= %@)", startDate, endDate];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Comment" inManagedObjectContext:self.context]];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *results = [self.context executeFetchRequest:request error:&error];

但我得到了 0 个结果。

所以我尝试用更简单的东西替换我的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"measurementDate >= %@", startDate];

这应该会返回大约三分之一的结果。但实际上它返回所有 200 条记录。

我已经注销了对象的日期,看起来日期被完全忽略了!

我究竟做错了什么???

是否与父抽象实体有关Measurement,因为我是从Comment实体而不是Measurement实体中获取的?是因为我在我的代码中使用了“原始数据类型的标量属性”吗?

非常感谢任何帮助。

4

2 回答 2

5

我认为问题在于您将日期值分配给托管对象的位置。如果measurementDate定义为标量属性

@property (nonatomic) NSTimeInterval measurementDate;

然后你给NSDate它分配一个

NSDate *theDate;
obj.measurementDate = [theDate timeIntervalSinceReferenceDate];
于 2013-04-08T17:22:20.330 回答
0

您应该使用NSDate或使用NSTimeInterval(原始的,因为它实际上是 a double)。

如果你把它们混在一起,你很容易把自己弄糊涂。基本上,一个NSDate对象是一个包装了一个NSTimeInterval值的类,即一个double——仅此而已。并NSDate添加了许多方法来处理该值。

不过,编译器应该给你一些警告。

于 2013-04-08T17:27:24.353 回答