Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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
Ios NSFetchResultsController时间筛选谓词建议_Ios_Database_Nspredicate - Fatal编程技术网

Ios NSFetchResultsController时间筛选谓词建议

Ios NSFetchResultsController时间筛选谓词建议,ios,database,nspredicate,Ios,Database,Nspredicate,我需要一些关于谓词的建议。在我的应用程序中,我希望能够按日期筛选结果。在此之前,我使用两个独立的谓词并检查是否设置了过滤器 if (self.isDateFilterSet==[NSNumber numberWithBool:NO]) { fetchRequest.predicate = [NSPredicate predicateWithFormat:@" whoRecorded.username = %@ AND deleted=0", [self.settings.currentUser

我需要一些关于谓词的建议。在我的应用程序中,我希望能够按日期筛选结果。在此之前,我使用两个独立的谓词并检查是否设置了过滤器

if (self.isDateFilterSet==[NSNumber numberWithBool:NO])
{

fetchRequest.predicate = [NSPredicate predicateWithFormat:@" whoRecorded.username = %@ AND deleted=0", [self.settings.currentUser username]];
}
else
{
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@" (whoRecorded.username = %@) AND (deleted = 0) AND (date =>%@) AND (date<=%@)", [self.settings.currentUser username],self.dateMinSetFilter ,self.dateMaxSetFilter];


}
if(self.isDateFilterSet==[NSNumber numberWithBool:NO])
{
fetchRequest.predicate=[NSPredicate predicateWithFormat:@“whorecored.username=%@且已删除=0”,[self.settings.currentUser username]];
}
其他的
{

fetchRequest.predicate=[NSPredicate predicateWithFormat:@”(Whorecored.username=%@)和(deleted=0)和(date=>%@)和(date当用户没有指定要筛选的日期时,不要使用数据库中的最小值和最大值。您知道需要所有内容,因此将最小值设置为
[NSDate distantPast]
,最大值设置为
[NSDate distantFuture]
然后您保证涵盖所有内容


添加一个方法:

- (void)resetDateFilters {
    self.dateMinSetFilter = [NSDate distantPast];
    self.dateMaxSetFilter = [NSDate distantFuture];

    // destroy the FRC here, delete cache if necessary
}

在view did load(这是初始设置)中调用它。每当用户想要重置筛选器时调用它。

您使用的日期是什么?这与新项目相比如何?现在在ViewDid load中,我调用此方法以获取开始时的实际最大/最小日期[self-getRealDateLimits];self.settings.dateMinSelected=settings.dateMinReal;self.settings.dateMaxSelected=settings.dateMaxReal;+我可以从其他视图更改这些日期以设置过滤器,并将其存储在“设置”单例中。日期的示例值是什么?日期应该如何更改(或者不应该更改)添加新对象时?不清楚您在寻找哪种解决方案…很抱歉解释不好。我的数据库存储血糖测量值,因此日期与测量值的时间相对应。在viewDidLoad中,我调用getRealDateLimits,它在数据库中查找当前的最小和最大日期,然后我设置这些日期dateMinSelected/dateMaxSelected并在谓词中使用它们。但是,当我添加新度量值时,它的日期通常是新的最大值。这就是我丢失的地方,因为我不知道更新表的有效方法。我可以设置nsnotification并基本上重复viewDidLoad方法,但我认为这不是一个好方法。因此我应该直到保留两个不同的谓词并检查是否设置了筛选器?您不需要。在
viewdiload
中设置这些日期,并且每当用户想要重置其筛选器时,老实说,我都有点不知所措。有空时,您能给我提供更多的细节吗?