我希望有一个NSTimer,如果某个条件(选择器为NO
)为真,则每x秒触发一个选择器。
x的值应该像这样改变 - 10,20,40,60,120。
如果选择器更改为YES
(它返回BOOL
),则计时器应停止并将其初始时间更改为10秒。
我有一个计时器的代码:
double i;
for (i= 10.0; i < maxInternetCheckTime; i++) {
[NSTimer scheduledTimerWithTimeInterval:i
target:self
selector:@selector(checkForInternetConnection)
userInfo:nil
repeats:NO];
NSLog(@"Timer is %f seconds", i);
}
但我得到的输出并不是我打算在开头看到的:
2012-12-21 19:25:48.351 Custom Queue[3157:c07] Timer is 10.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 11.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 12.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 13.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 14.000000 seconds
2012-12-21 19:25:48.352 Custom Queue[3157:c07] Timer is 15.000000 seconds
等等。 我在这个非常微不足道的任务中做错了什么?
答案 0 :(得分:2)
for (i= 10.0; i < maxInternetCheckTime; i++) { [NSTimer scheduledTimerWithTimeInterval:i
你正在安排一组10个计时器在同一时刻执行:10,11,12,13等秒。
您只需要一个计时器即可:
[NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(checkForInternetConnection:)
userInfo:nil
repeats:NO];
然后在checkForInternetConnection
中根据需要安排一个新的:
-(void)checkForInternetConnection:(NSTimer*)firedTimer {
float interval = firedTimer.timeInterval;
interval *= 2;
if (<CONDITION>) {
[NSTimer scheduledTimerWithTimeInterval:interval
target:self
selector:@selector(checkForInternetConnection)
userInfo:nil
repeats:NO];
}
}
我希望逻辑清晰:
您安排了支票;
你做了检查;
如果检查不正确,请安排新的。
希望它有所帮助。
答案 1 :(得分:-1)
您正在打印i
,从10开始的每个周期都会增加1.这是正确的输出。