核心数据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
添加了许多处理该值的方法。
不过,编译器应该给你一大堆警告。