Xcode中:为什么我的定时器每滴答计数2秒?(Xcode: Why is my timer cou

2019-06-25 08:49发布

您好我有一个计时器应从12:00分在iPhone应用程序数到晚上12点! 但是,当它启动时,它计算这样的; 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 ..它可以有事可做的事实,我有很多的按钮之类的东西在屏幕上? 一些内存错误?

提前致谢!

Answer 1:

你的逻辑看起来不错。 你确定你不是在创建计时器两次?



Answer 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];
}


Answer 3:

有时从Xcode的运行可以使事情很慢。 如前所述的逻辑看起来很好。 你可以尝试在手机上运行它,但不能从Xcode的。 这可能与仿真器正常工作。 不知道这一点,但。



文章来源: Xcode: Why is my timer counting 2 seconds on every tick?