Xcode:为什么我的计时器在每次打勾时计数2秒?

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

它每秒钟计数2秒。

这是开始button代码中的代码:

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 ..这可能与事实,我有很多的button和屏幕上的东西? 一些内存错误?

提前致谢!

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

你的代码没有问题,先尝试login

那么你会知道它是否每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]; } 

有时从xcode运行可以使事情真的很慢。 如前所述,逻辑看起来很好。 你可以尝试在手机上运行它,但不能从xcode中运行。 这可能也适用于模拟器。 不知道,但。