按创建日期订购对象(一天)

时间:2013-08-01 10:14:00

标签: objective-c

你有这样的课程:

@interface Foo : NSObject
property(nonatomic, strong) NSNumber *dateCreated;
@end

我有一个Foo类型的对象数组,如下所示:

NSMUtableArray *array = [NSMUtableArray array];
Foo *foo1 = [Foo alloc] init];
foo1.dateCreated =[NSNumber numberWithDouble:[NSDate timeIntervalSince1970]]; 
[array addObject:foo1];

Foo *foo2 = [Foo alloc] init];
foo1.dateCreated =[NSNumber numberWithDouble:[NSDate timeIntervalSince1970]]; 
[array addObject:foo2];

....

对象foo1,foo2,...不是同时创建的。这些是在différents日期创建的。

问题:

我想在白天订购我的物品,我的意思是这里有所有的物品,例如:2009年9月6日,另一个列表创建于2009年9月7日,....

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

查找所有对象的第一个创建日期。这是用于开始迭代的第一天。查找上次创建日期,这将告诉您迭代何时完成。这两个日期都需要转换,因此它们分别在当天的开始和结束时。

迭代,从第一个日期开始,一直持续到最后一个日期,每次增加一天的秒数。

请注意,同样的过程可以使用存储的日期而不是数字,但您可以使用NSDateComponents,这样可以更轻松地计算第一个和最后一个日期并添加日期时间间隔。

在你的循环中你有两个日期:

  1. 该迭代的开始日期
  2. 该迭代的结束日期(比开始日期的一整天少1秒)
  3. 使用此信息,您可以在源对象列表上运行谓词:

    [NSPredicate predicateWithFormat:@"dateCreated >= %@ AND dateCreated <= %@", startDate, endDate]
    

    检查过滤器(filteredArrayUsingPredicate:)后结果数组中是否有任何内容,如果有结果,则将其添加到结果列表(或字典)中。