2

嗨,我有一个计时器,应该在 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.. 这可能与我在屏幕上有很多按钮和东西的事实有关吗?一些内存错误?

提前致谢!

4

3 回答 3

5

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

于 2012-04-25T15:27:30.223 回答
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];
}
于 2012-04-25T18:13:45.210 回答
1

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

于 2012-04-25T15:44:39.623 回答