增加NSDate以用于for循环

时间:2014-02-23 22:18:29

标签: ios objective-c for-loop

我正在寻找一种方法来编写一个迭代NSDate的for循环。每个循环都应该将NSDate增加10秒。

我想要2个时间戳。假设时间戳A是星期一午夜,时间戳B是星期二午夜。

我当时想要的是一些代码,说明A到B在两个时间点之间以10秒的间隔递增,使用当前位置的时间戳和最后位置的时间戳,所以我可以运行查询在间隔。

有人会如此善良地向我展示我将如何做到这一点吗?

非常感谢

2 个答案:

答案 0 :(得分:4)

for循环需要三个部分,初始化,比较和增量。它看起来像这样:

for (NSDate *date = startDate;                    // initialisation
    [date compare:endDate] == NSOrderedAscending; // compare
    date = [date dateByAddingTimeInterval:10])    // increment
{
    // do something with date here, eg:
    NSDate *rangeStart = date;
    NSDate *rangeEnd = [date dateByAddingTimeInterval:10];

    [runQuery begin:rangeStart end:rangeEnd];
}

您可能更喜欢重构使用while循环,以便不需要重复dateByAddingTimeInterval。

这与循环的正常结构相同:

for (int i = 0;  // initialisation
     i < 10;     // compare
     i++)        // increment
{
    // do something with i here
}

答案 1 :(得分:2)

听起来你可能想看看NSTimer's timerWithTimeInterval。界面如下所示:

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

然后你可以在十秒后使用:

开始
initWithFireDate:interval:target:selector:userInfo:repeats:

您可以注册每秒发送一次的呼叫,如下所示:

// SomeClass.m

#import "SomeClass.h"
@interface ()
@property (nonatomic, strong) NSTimer timer1;
@property (nonatomic, strong) NSTimer timer2;
@end

@implementation SomeClass

- (id)init
{
  self = [super init];
  if (self) {
    NSDate* date = [[NSDate date] dateByAddingTimeInterval:10];
    self.timer1 = [NSTimer timerWithTimeInterval:10 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
    self.timer2 = [[NSTimer alloc] initWithFireDate:date interval:10 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
  }
  return self;
}

- (void)timerFireMethod:(NSTimer *)timer
{
  if (timer == self.timer1) {
    NSLog(@"timer1 fired");
  }
}
@end