我正在寻找一种方法来编写一个迭代NSDate的for循环。每个循环都应该将NSDate增加10秒。
我想要2个时间戳。假设时间戳A是星期一午夜,时间戳B是星期二午夜。
我当时想要的是一些代码,说明A到B在两个时间点之间以10秒的间隔递增,使用当前位置的时间戳和最后位置的时间戳,所以我可以运行查询在间隔。
有人会如此善良地向我展示我将如何做到这一点吗?
非常感谢
答案 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