0

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

喜欢 :

  1. 2013 年的过滤器阵列
  2. 日期 12-mar-13 的过滤器数组
  3. 2012 年 2 月的过滤器数组
  4. 在日期范围内过滤数组

请给我一个解决方案或建议我一种更好的核心数据数据管理方法来实现这一目标......

提前致谢

4

2 回答 2

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];

这段代码来自这里

当使用谓词过滤数组时,使用数组实例方法filteredArrayUsingPredicate:和上面代码中创建的谓词来过滤数组。

在谓词中使用日期时,日期对象也存储时间数据,因此您可能希望检查午夜到午夜或 00:00 到 23:59 等时间范围。类似的东西,取决于您要比较的内容。

于 2013-05-27T12:07:16.637 回答
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];
于 2013-05-27T12:08:36.637 回答