过滤特定日期或年份或月份或日期范围的核心数据对象数组

时间:2013-05-27 11:40:10

标签: objective-c xcode core-data nsarray

我有一个对象数组,这个数组的一个属性是NSDate。 我需要创建函数来根据特定日期过滤这些对象

喜欢:

  1. 2013年的过滤器数组
  2. 日期为12-mar-13的过滤器数组
  3. 2012年月份的过滤器数组
  4. 范围日期内的过滤器数组
  5. 请给我一个解决方案或建议我在核心数据中使用更好的数据管理方法来实现这一目标......

    提前致谢

2 个答案:

答案 0 :(得分:1)

从核心数据存储中提取时,可以使用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。类似的东西,取决于你想要比较的东西。

答案 1 :(得分:0)

您应该使用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];