Xcode:为什么我的计时器每次打勾都会计算2秒?

时间:2012-04-25 15:26:23

标签: iphone ios xcode nstimer countdown

嗨我有一个计时器应该在一个iPhone应用程序中从12:00分钟到0:00计数! 但是当它开始时它就像这样; 11:58 11:56 11:54 11时52

每次打勾都会计算2秒钟。

这是开始按钮代码中的代码:

tid.text=[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];
timer= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tidklick) userInfo:nil repeats:YES];

这是方法tidklick:

-(void) tidklick
{

tiden -= 1;
sekunder = tiden % 60;
minuter= (tiden - sekunder) / 60;
tid.text=[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];

}

这是开头的代码..

 int tiden=720;
 int sekunder;
 int minuter;

这出现在我放入方法的NSLog中......

2012-04-26 06:41:38.562 Matte [288:f803] tiden: 719
sekunder: 59
 2012-04-26 06:41:38.607 Matte [288:f803] tiden: 718
 sekunder: 58
 2012-04-26 06:41:39.562 Matte[288:f803] tiden: 717
 sekunder: 57
 2012-04-26 06:41:39.607 Matte[288:f803] tiden: 716
  sekunder: 56
 2012-04-26 06:41:40.562 Matte [288:f803] tiden: 715
 sekunder: 55
 2012-04-26 06:41:40.607 Matte [288:f803] tiden: 714
 sekunder: 54

我曾尝试使用新名称和新方法创建一个新计时器,但它仍然是2 ...它是否与我在屏幕上有很多按钮和东西这一事实有关?一些内存错误?

提前致谢!

3 个答案:

答案 0 :(得分:5)

你的逻辑很好看。你确定你没有两次创建计时器吗?

答案 1 :(得分:2)

您的代码没有问题,请先尝试登录

然后你会知道它是否每2秒计算一次,或者每2秒刷新一次UI

-(void) tidklick
{

tiden -= 1;
sekunder = tiden % 60;
// add log here
NSLog(@"tiden: %d\n sekunder: %d",tiden,sekunder);

minuter= (tiden - sekunder) / 60;
tid.text=[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];

}

您可以尝试在后台线程中运行计时器

[self performSelectorInBackground:@selector(schedule) withObject:nil];

- (void) schedule {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];

timer = [[NSTimer scheduledTimerWithTimeInterval:1.0f
                                              target:self
                                    selector:@selector(run:)
                                    userInfo:nil
                                     repeats:YES]
     retain];

[runLoop run];
[pool release];
}


-(void) run:(id) sender{

// you should handle the thread-safe 
tiden -= 1;
sekunder = tiden % 60;
// add log here
NSLog(@"tiden: %d\n sekunder: %d",tiden,sekunder);
minuter= (tiden - sekunder) / 60;
NSString *test =[NSString stringWithFormat:@"%d:%.2d",minuter,sekunder];

[label performSelectorOnMainThread:@selector(setText:) withObject:test waitUntilDone:YES];
}

答案 2 :(得分:1)

有时从xcode运行会让事情变得非常缓慢。如前所述,逻辑看起来很好。您可以尝试在手机上运行它,但不能从xcode运行。这也适用于模拟器。虽然不确定。