核心数据NSPredicate不会在两个日期之间返回记录

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

Measurement实体具有measurementDate属性。

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

我正在尝试获取记录,其中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个记录。

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

我究竟做错了什么???

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

任何帮助非常感谢。

我假设问题是您将日期值分配给托管对象。 如果measurementDate被定义为标量属性

 @property (nonatomic) NSTimeInterval measurementDate; 

然后你用它分配一个NSDate

 NSDate *theDate; obj.measurementDate = [theDate timeIntervalSinceReferenceDate]; 

你应该使用NSDate或使用NSTimeInterval (原语,因为它真的是一个double )。

如果你混合使用它们,你很容易混淆自己。 基本上, NSDate对象是一个包装NSTimeInterval值的类,即一个double – 仅此而已。 NSDate添加了许多处理该值的方法。

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