我需要一些关于谓词的建议。在我的应用程序中,我希望能够按日期过滤结果。在我使用2个单独的谓词并检查是否设置了过滤器之前。
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];
}
我正在清理我的代码并决定始终将日期保留在谓词中并检查每次更新的日期。但是,当我插入新数据时,不会调用委托方法,因为不满足date&lt; =%@。
你能否建议我处理这类情况的正确方法?
答案 0 :(得分:1)
如果用户未指定要过滤的日期,请不要使用数据库中的min和max。你知道你想要一切,所以将min设置为[NSDate distantPast]
,将max设置为[NSDate distantFuture]
,然后保证涵盖所有内容。
添加方法:
- (void)resetDateFilters {
self.dateMinSetFilter = [NSDate distantPast];
self.dateMaxSetFilter = [NSDate distantFuture];
// destroy the FRC here, delete cache if necessary
}
在视图中调用它加载(这是初始设置)。每当用户想要重置过滤器时调用它。