我有一个 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 条记录。
我已经注销了对象的日期,看起来日期被完全忽略了!
我做错了什么???
这是否与父抽象实体 Measurement
有关,因为我是从 Comment
实体而不是 Measurement
实体获取的?
是因为我在代码中使用“原始数据类型的标量属性”吗?
非常感谢任何帮助。
最佳答案
我认为问题在于您将日期值分配给托管对象的位置。如果 measurementDate
被定义为标量属性
@property (nonatomic) NSTimeInterval measurementDate;
然后你用NSDate
给它分配
NSDate *theDate;
obj.measurementDate = [theDate timeIntervalSinceReferenceDate];
关于ios - 核心数据 NSPredicate 不返回两个日期之间的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15884250/