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

the*_*ncs 2 core-data ios

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

Measurement实体具有measurementDate属性.

我的核心数据库中有200 Comment条记录,每条记录在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];
Run Code Online (Sandbox Code Playgroud)

但我得到0结果.

那么我尝试用更简单的东西替换我的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"measurementDate >= %@", startDate];
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么???

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

任何帮助非常感谢.

Mar*_*n R 5

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

@property (nonatomic) NSTimeInterval measurementDate;
Run Code Online (Sandbox Code Playgroud)

然后你给NSDate它分配一个

NSDate *theDate;
obj.measurementDate = [theDate timeIntervalSinceReferenceDate];
Run Code Online (Sandbox Code Playgroud)

  • @theDuncs:我认为你必须使用`timeIntervalSinceReferenceDate`而不是`timeIntervalSince1970`,因为这是Core Data用于转换的内容.你能试试吗? (2认同)