我有一个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
实体获取的?
是因为我在我的代码中使用“原始数据类型的标量属性”吗?
非常感谢任何帮助。
答案 0 :(得分:5)
我认为问题在于您将日期值分配给托管对象。如果measurementDate
被定义为标量属性
@property (nonatomic) NSTimeInterval measurementDate;
然后您使用
为其分配NSDate
NSDate *theDate;
obj.measurementDate = [theDate timeIntervalSinceReferenceDate];
答案 1 :(得分:0)
您应该使用NSDate
或使用NSTimeInterval
(原语,因为它实际上是double
)。
如果你混合使用它们,你很容易混淆自己。基本上,NSDate
对象是一个包含NSTimeInterval
值的类,即double
- 仅此而已。并且NSDate
添加了许多处理该值的方法。
但编译器本应给你一些警告。