ios - 核心数据 NSPredicate 不返回两个日期之间的记录

标签 ios core-data

我有一个 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/

相关文章:

ios - 使用 Xcode 上的 App 和扩展复制 WatchOS2 的目标

swift - 如何为 NSFetchRequest 转换 T.Type?

ios - 从 Parse 中检索数组并将它们保存在具有相应值的字典中。 [字符串() : [String]()]

ios - UIDocumentInteractionController 的打开方式功能?

iphone - 如何验证下载文件的完整性?

cocoa - 如何将 NSKeyedUnarchive NSManagedObject 的子类导入到 Core Data 中?

iphone - 将Core Data数据与外部数据库同步

objective-c - 是否基于文档的应用程序?

ios - RestKit 0.20 - POST 多个对象

ios - 我可以用 sudzc 更改服务器 url 吗?