Core data NSPredicate获取NSDate范围内具有dates属性的核心数据对象

Core data NSPredicate获取NSDate范围内具有dates属性的核心数据对象,core-data,nsdate,nspredicate,Core Data,Nsdate,Nspredicate,我正在使用一个带有两个的NSPredicate,我首先添加以下可执行参数: -com.apple.CoreData.SQLDebug 1 当你运行你的应用程序时,这将向控制台输出大量的调试信息,但是它还应该包括关于谓词的信息,它试图转换为SQL,甚至可能包括它不工作的原因 显然,在发布应用程序之前,您需要将其删除:)查看生成的SQL查询后,时间戳似乎是作为字符串而不是整数计算的。这解释了我的谓词不起作用的原因。我通过在SQLite数据库上运行以下SQL查询确认了这一点,我正在使用该数据库预填充

我正在使用一个带有两个
NSPredicate
,我首先添加以下可执行参数:

-com.apple.CoreData.SQLDebug 1
当你运行你的应用程序时,这将向控制台输出大量的调试信息,但是它还应该包括关于谓词的信息,它试图转换为SQL,甚至可能包括它不工作的原因


显然,在发布应用程序之前,您需要将其删除:)

查看生成的SQL查询后,时间戳似乎是作为字符串而不是整数计算的。这解释了我的谓词不起作用的原因。我通过在SQLite数据库上运行以下SQL查询确认了这一点,我正在使用该数据库预填充核心数据

SELECT DISTINCT typeof(ZSTARTTIME) FROM ZMATCH;
这表明时间戳字段的类型是BLOB

将“+0”添加到我的谓词中,使startTime属性作为一个整数进行计算,修复了该问题。然而,这似乎是一个令人讨厌的解决方案。另外,将日期存储为blob很可能会导致问题进一步恶化。所以我回去重新填充SQLite数据库,确保时间戳是作为整数而不是字符串插入的。现在一切正常


然而,这确实意味着我必须在下一次应用程序更新中做更多的工作,因为我必须确保更新用新的数据库覆盖Documents文件夹中的旧SQLite数据库。有没有一个简单的方法可以做到这一点?我应该看看核心数据存储迁移吗???

谢谢Dave,这帮我解决了这个问题(见我的答案):-)@MattVick:很高兴你解决了这个问题。我们表达感谢的方式是对你发现有帮助的问题的答案进行投票。
startTime
---------
337249800
337309200
337318200
-com.apple.CoreData.SQLDebug 1
SELECT DISTINCT typeof(ZSTARTTIME) FROM ZMATCH;