【发布时间】:2013-05-22 06:20:27
【问题描述】:
我有一个对象数组,这个数组的一个属性是NSDate。
我需要创建函数来根据特定日期过滤这些对象
喜欢:
- 2013 年的过滤器数组
- 13 年 3 月 12 日的过滤器数组
- 2012 年 2 月的过滤器数组
- 过滤日期范围内的数组
请给我一个解决方案或建议我一种更好的核心数据数据管理方法来实现这一点......
提前致谢
【问题讨论】:
标签: objective-c xcode core-data nsarray
我有一个对象数组,这个数组的一个属性是NSDate。
我需要创建函数来根据特定日期过滤这些对象
喜欢:
请给我一个解决方案或建议我一种更好的核心数据数据管理方法来实现这一点......
提前致谢
【问题讨论】:
标签: objective-c xcode core-data nsarray
当您从核心数据存储中获取数据时,您可以使用 NSPredicate 过滤结果。同样在从核心数据存储中获取后,您可以使用 NSPredicate 进行过滤(如过滤任何数组)。
从核心数据中获取时,您可以像下面这样使用它:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", startDate, endDate];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:moc]];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];
此代码来自here。
当使用谓词过滤数组时,使用数组实例方法filteredArrayUsingPredicate: 和上面代码中创建的谓词来过滤数组。
在谓词中使用日期时,日期对象也存储时间数据,因此您可能希望检查午夜到午夜或 00:00 到 23:59 等时间范围。类似的东西,取决于您要比较的内容。
【讨论】:
您应该使用NSPredicate。您可以过滤结果数组或将谓词直接包含到您的NSFetchRequest 中。
/* 1 */ [NSPredicate predicateWithFormat:@"date > %@ && date < %@",
firstDayOfYear, lastDayOfYear];
/* 2 */ [NSPredicate predicateWithFormat:@"date > %@ && date < %@",
startMarch12, endMarch12];
/* 3 */ [NSPredicate predicateWithFormat:@"date > %@ && date < %@",
startFeb2012, endFeb2012];
/* 4 */ [NSPredicate predicateWithFormat:@"date > %@ && date < %@",
startDate, endDate];
【讨论】: