我是一个从IE进入OSX可可编程的完整noobie,并且在使用NSTimer方面遇到了很多麻烦。我试图创建一个应用程序,使用户指定的持续时间计时器在后台运行,然后在该计时器到期时执行某些操作(如倒数计时器)。
当它在前台时我的应用程序正常工作。但如果它进入后台(即:我点击另一个应用程序窗口),计时器就会变得完全错误,并且倒计时似乎是临时进行的。然后,一旦我重新关注这个应用程序,计时器似乎重新启动。但是,如果在应用程序处于后台时已经过了预定的时间,应用程序就不知道了。
以下是我在主要运行循环中调用的基本代码:
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateStatus) userInfo:nil repeats:YES];
-(void) updateStatus {
if([self.totalSeconds]>0) {
self.totalSeconds=self.totalSeconds-1;
} else {
//perform end of timer methods
}
}
我做错了什么?
提前感谢您的时间/协助。
-M
答案 0 :(得分:1)
您不能依赖计时器的计时(特别是当您在后台运行时)。你可以在什么时候使用计时器作为看的提示,但你决定在现实世界中经过多少时间的方式不是通过递减整数,而是通过递减将原始时间存储在实例变量中并比较它现在的时间。 (看看NSDate看看如何做到这一点。)