Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSPredicate用于检查与其他变量匹配的CoreData属性是否满足条件_Objective C_Core Data_Nspredicate - Fatal编程技术网

Objective c NSPredicate用于检查与其他变量匹配的CoreData属性是否满足条件

Objective c NSPredicate用于检查与其他变量匹配的CoreData属性是否满足条件,objective-c,core-data,nspredicate,Objective C,Core Data,Nspredicate,我有一个有三个字段的实体 Task { Active BOOL Recurrent Int Started date } “经常性”是任务发生的延迟。如果任务有一个给定的“开始”和一个15的“重复”,则意味着它必须在“开始”后15天重复。 我想构建一个NSPredicate,用于查找在给定日期需要执行的所有实体 例如,假设存储中有一个实体的'Started'=15/12/2011'Recurrent'=15,那么在2011年12月29日查询CoreData时不会给出任何结果。

我有一个有三个字段的实体

Task {
   Active BOOL
   Recurrent Int
   Started date
}
“经常性”是任务发生的延迟。如果任务有一个给定的“开始”和一个15的“重复”,则意味着它必须在“开始”后15天重复。 我想构建一个NSPredicate,用于查找在给定日期需要执行的所有实体

例如,假设存储中有一个实体的'Started'=15/12/2011'Recurrent'=15,那么在2011年12月29日查询CoreData时不会给出任何结果。在2011年12月30日进行查询将给出一个结果,因为“开始”已经过去了15天

我可以通过一些数学运算轻松地用SQL来处理这个问题,但我完全不知道如何使用NSPredicate来实现这一点,因为查询是直接在字段上完成的。 我想继续使用NSPredicate,因为它是一个具有UITableView的iOS应用程序,我计划使用NSFetchedResultsController,但如果不可能,则可以使用NSArray实体

谢谢

“简单”的答案是将
周期性的
也存储为日期。或者存储作为日期的
recurrentResolved
值,并根据该值进行提取

不那么简单和丑陋的选项是加载所有任务并在内存中进行计算(以一种方便的方法),然后对对象执行第二次预测。一旦它们加载到内存中,
NSPredicate
就可以利用子类中的方法

我建议第一种选择。第二个要贵得多。

简单的答案是将
重复性
也存储为日期。或者存储作为日期的
recurrentResolved
值,并根据该值进行提取

不那么简单和丑陋的选项是加载所有任务并在内存中进行计算(以一种方便的方法),然后对对象执行第二次预测。一旦它们加载到内存中,
NSPredicate
就可以利用子类中的方法


我建议第一种选择。第二个要贵得多。

您能在这里也使用predicateWithBlock吗?不过,我同意你的第一个选择是最好的。在对象被提取到内存后,是的。在
NSFetchRequest期间
;不,这可以转化为实际的SQL。我知道这是我的错,但当使用CoreData时,迟早会让我走到死胡同。我不知道第一个选项,我需要在一个UITable中使用这个东西,它可以填充未来或过去的任何日期。这就是计算的需要。使用自定义函数的NSExpression如何?您不能在
NSFetchRequest
中进行计算。没有例外,也没有解决办法。这是一个限制,您可以提交雷达,但该功能不存在。因此,你只有两个选择;预先计算值或筛选两次。您是否也可以在此处使用predicateWithBlock?不过,我同意你的第一个选择是最好的。在对象被提取到内存后,是的。在
NSFetchRequest期间
;不,这可以转化为实际的SQL。我知道这是我的错,但当使用CoreData时,迟早会让我走到死胡同。我不知道第一个选项,我需要在一个UITable中使用这个东西,它可以填充未来或过去的任何日期。这就是计算的需要。使用自定义函数的NSExpression如何?您不能在
NSFetchRequest
中进行计算。没有例外,也没有解决办法。这是一个限制,您可以提交雷达,但该功能不存在。因此,你只有两个选择;预先计算值或过滤两次。