Ios 使用NSPredicate按日期筛选coredata不会返回任何结果

Ios 使用NSPredicate按日期筛选coredata不会返回任何结果,ios,core-data,Ios,Core Data,嗨,我是这个coredata的新手。我有两个实体CategoryList和ExpenseList。类别列表由两个属性组成 1.日期(nsdate) 2.类别(nsstring) 在与ExpenseList的许多关系中,关系名称为“ExpenseList” ExpenseList由以下部分组成 1.花费的金额(浮动)。 我只是想了解coredata中的关系特性。当我试图创建nspredicate以按特定日期筛选数据时,它什么也不返回。我只是想过滤CategoryList实体中特定日期的catego

嗨,我是这个coredata的新手。我有两个实体CategoryList和ExpenseList。类别列表由两个属性组成
1.日期(nsdate)
2.类别(nsstring)
在与ExpenseList的许多关系中,关系名称为“ExpenseList” ExpenseList由以下部分组成 1.花费的金额(浮动)。
我只是想了解coredata中的关系特性。当我试图创建nspredicate以按特定日期筛选数据时,它什么也不返回。我只是想过滤CategoryList实体中特定日期的categories属性内容。这是我的密码

-(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
endOfDay-2013-05-01 18:29:59+0000实际上是一个时间戳,因此使用它只会返回具有该准确时间戳的项目

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

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

要计算
startOfDay
endOfDay
,您可以自己手动计算,也可以使用其他一些库来计算,例如。

我使用此解决方案只比较日期而不比较时间。在这种情况下,我的日期格式为yyyy MM dd:

NSDateFormatter * formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSString * dateString = [formatter stringFromDate:[NSDate date];
NSDate *rdate = [formatter dateFromString:dateString];

NSPredicate *datePre = [NSPredicate predicateWithFormat:@"date = %@", rdate];

您可以使用日期和时间来更改日期格式

@user523234我来试试。除了这个,你还能发现其他错误吗。谢谢你的回复,你从来没有真正申报过日期。@sosborn是的,我申报过。我在viewDidLoad中声明了这一点。“date”字符串将给出当前设备日期。该值是您在获取时所期望的值吗?您正在获取的对象是否具有该确切日期?非常感谢,当我尝试在ns谓词中明确给出日期(如2013-05-03)时,这一点非常有效。但当我尝试使用函数查找一天的开始和结束时,问题仍然存在。我已经用我的代码进行了更新,以找到一天的开始和结束。感谢您的期待,我自己在查找一天的开始和结束的功能中找不到任何错误。如果你能帮我的话。非常感谢您对谓词进行少量更正,以便在日期之间将
日期>=%@
更改为
日期