观看 OS2 NSTimer 问题

Watch OS2 NSTimer problems

我正在开发一个应用程序,我需要在激活手表时启动一个计时器(使用 NSTimer)。使用计时器,我向 iPhone 询问一些信息(大约每 1 秒一次,最多 5 秒)。我用它来启动计时器

timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(myfunction) userInfo:nil repeats:NO];

在"myfunction"函数中,我下次重新启动定时器。

- (void) myfunction
{
   //Here I update a label text
   // [...]

   [timer invalidate];
   timer = nil;

   counter++;
   if(counter<5)
   {
     timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(myfunction) userInfo:nil repeats:NO];
   }
}

我的问题是,在模拟器中一切正常,但在真正的手表 (Watch-OS2 GM) 中,计时器有时不启动或有时启动但只启动一次,之后似乎冻结了!我看到这个是因为我在显示计数器的每个经过时间段更新手表中的标签,我确定所有内容都在 "will activate" 函数中初始化。我不明白为什么。有人有同样的问题吗?

来自documentation

Use your interface controller’s init and awakeWithContext: methods to load any required data, set the values for any interface objects, and prepare your interface to be displayed. Do not use the willActivate to initialize your interface controller. The willActivate method is called shortly before your interface is displayed onscreen, so you should use that method only to make last-minute changes. For example, you might also use that method to start animations or start other tasks that should only happen while your interface is onscreen.

那么,你是用什么方法实例化定时器的呢?

确保使用 willActivate 方法并使用 didDeactivate 方法清理界面并将其置于静止状态。例如,使用此方法使计时器失效并停止动画。

希望对您有所帮助

我的问题已通过 Watch OS 2.1 解决。问题与手腕的快速移动有关:随着 WatchOS 的最新更新,快速移动后所有计时器都正确恢复并且一切正常