Iphone 仅通过时间组件将NSDate与NSPredicate进行比较

Iphone 仅通过时间组件将NSDate与NSPredicate进行比较,iphone,ios,cocoa-touch,nsdate,nspredicate,Iphone,Ios,Cocoa Touch,Nsdate,Nspredicate,我熟悉使用NSCalendar和NSDateComponents仅比较NSDate的某些组件。但是,我想知道,在过滤日期数组或获取将日期作为属性之一的核心数据实体时,是否可以使用NSPredicate实现这一点 例如,假设我正在存储一个具有属性birthday的核心数据实体Person生日是一个NSDate,它存储了个人生日的日期和时间。我可以使用NSPredicate(或任何其他工具)在晚上7点后只取生日的人s吗 或者我必须单独存储日期和时间才能实现这一点?(例如,存储生日日期和生日日期) (

我熟悉使用
NSCalendar
NSDateComponents
仅比较
NSDate
的某些组件。但是,我想知道,在过滤日期数组或获取将日期作为属性之一的核心数据实体时,是否可以使用
NSPredicate
实现这一点

例如,假设我正在存储一个具有属性
birthday
的核心数据实体
Person
<代码>生日是一个NSDate,它存储了个人生日的日期和时间。我可以使用
NSPredicate
(或任何其他工具)在晚上7点后只取
生日
s吗

或者我必须单独存储日期和时间才能实现这一点?(例如,存储
生日日期
生日日期


(我尝试过使用只有时间成分的
NSDate
进行过滤,似乎所有
NSDate
s缺少的日期成分都被认为比同时包含日期和时间成分的
NSDates
更早。)

这是核心数据。你必须对时间进行非规范化。

它是核心数据。您必须对时间进行非规范化。

NSPredicate有一个
+predicateWithBlock:
,允许您使用任意逻辑创建自定义谓词。但是,不能使用以这种方式创建的谓词作为从SQLLite存储获取CoreData的谓词。在这种情况下,您需要执行一个通用的获取,然后使用
-[NSArray filteredrayingpredicate:

NSPredicate有一个
+predicateWithBlock:
来过滤结果,它允许您使用任意逻辑创建自定义谓词。但是,不能使用以这种方式创建的谓词作为从SQLLite存储获取CoreData的谓词。在这种情况下,您需要执行一个通用的获取,然后使用
-[NSArray filteredarrayingpredicate:

过滤结果,我对编码还是相当陌生。。。那么,“非规范化”是指单独存储时间?哈哈:P还有,如果我已经有了一个
Person
s数组(而不是通过核心数据获取实体)?你应该能够遍历Person数组来找到符合条件的人。您可以使用
indexesOfObjectsPassingTest:
来进行此操作。好的,谢谢。最后一个问题。。。总的来说,单独存储时间并让核心数据处理事情会有更好的性能,对吗?我对编码还是相当陌生。。。那么,“非规范化”是指单独存储时间?哈哈:P还有,如果我已经有了一个
Person
s数组(而不是通过核心数据获取实体)?你应该能够遍历Person数组来找到符合条件的人。您可以使用
indexesOfObjectsPassingTest:
来进行此操作。好的,谢谢。最后一个问题。。。一般来说,单独存储时间并让核心数据处理事情会更好,对吗?谢谢,这就是我的想法。我可能最终还是决定分别存储日期和时间,但我认为这是一个更好的答案。再次感谢。谢谢,这就是我的想法。我可能最终还是决定分别存储日期和时间,但我认为这是一个更好的答案。再次感谢。