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中运行。 这可能也适用于模拟器。 不知道,但。