使用 NSPredicate 按日期过滤 coredata 不返回任何内容

2023-12-13

嗨,我是这个核心数据的新手。我有两个实体 CategoryList 和 ExpenseList。 CategoryList由两个属性组成
1.日期(nsdate)
2.类别(nsstring)
在与 ExpenseList 的许多关系中,关系名称为“expenseList” 费用清单包括 1.花费金额(浮动)。
我只是想了解 coredata 中的关系特征。当我尝试创建一个 nspredicate 来按特定日期过滤数据时,它什么也不返回。我只想过滤 CategoryList 实体中特定日期的类别属性内容。这是我的代码

-(void) callingByDate
{


NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

NSEntityDescription *categoryL = [NSEntityDescription entityForName:@"CategoryList" inManagedObjectContext:managedObjectContext];

NSSortDescriptor *dateSort = [[NSSortDescriptor alloc]initWithKey:@"date" ascending:YES];

NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:dateSort, nil];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"dates == %@",date];



NSFetchRequest *dateFetch = [[NSFetchRequest alloc]init];



[dateFetch setSortDescriptors:sortDescriptors];

[dateFetch setEntity:categoryL];

[dateFetch setPredicate:predicate];



NSMutableArray *results = [[managedObjectContext executeFetchRequest:dateFetch error:nil] mutableCopy];

if([results count] > 0)

    NSLog(@"results found");

else

    NSLog(@"no results found");

}

当我在 nslog 区域执行此代码时,它显示“未找到结果”。我不明白为什么。提前致谢

这是我的代码,用于查找一天的结束和开始

-(NSDate *)beginningOfDay:(NSDate *)date;

 {

 NSDate *dat = [NSDate date];

 NSCalendar *cal = [NSCalendar currentCalendar];

 NSDateComponents *components = [cal components:( NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:dat];

[components setHour:0];

[components setMinute:0];

[components setSecond:0];



return [cal dateFromComponents:components];





 }



-(NSDate *)endOfDay:(NSDate *)date;

{

NSDate *dat = [NSDate date];

NSCalendar *cal = [NSCalendar currentCalendar];

NSDateComponents *components = [cal components:( NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:dat];

[components setHour:23];

[components setMinute:59];

[components setSecond:59];



return [cal dateFromComponents:components];

当我 nslog 时,显示的结果是 开始日-2013-04-30 18:30:00 +0000 日结束 -2013-05-01 18:29:59 +0000


date实际上是一个时间戳,所以这样做==它只会返回具有确切时间戳的项目。

要获取特定日期的所有条目,您需要获取NSDate一天的开始(startOfDay),以及NSDate一天结束时(endOfDay) 然后修改谓词以使用以下方法获取这两个值之间的日期:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"dates >= %@ AND dates >= %@", startOfDay, endOfDay];

计算startOfDay and endOfDay您可以自己手动完成,也可以使用其他一些库来计算它,例如https://github.com/erica/NSDate-Extensions.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NSPredicate 按日期过滤 coredata 不返回任何内容 的相关文章

随机推荐