观看OS2 NSTimer问题

时间:2015-09-21 06:58:34

标签: ios xcode nstimer watchkit watch-os-2

我正在开发一个App,我需要在Watch启动时启动计时器(使用NSTimer)。使用Timer I向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)中,计时器有时无法启动或有时启动但只有一次,之后似乎冻结了!我看到了这一点,因为我在显示计数器的每个经过时间段更新手表中的标签,我确信所有都在“将激活”功能中初始化。我不明白为什么。有人有同样的问题吗?

3 个答案:

答案 0 :(得分:2)

我有一个非常类似且同样令人沮丧的问题,主计时器有一个警报计时器定期关闭。在模拟器中完美运行,但不在手表上。我听到开始声音,然后有时是第一个警报然后什么都没有。我用按钮启动计时器,而不是手表启动时。我在手机的已发布应用程序上运行的代码类型相同,显然有效。 我只是找不到解决方案。令人难以置信的令人沮丧。您是否在解决问题方面取得了进一步的成功?

答案 1 :(得分:1)

来自documentation

  

使用你的接口控制器的init和awakeWithContext:方法来   加载任何所需的数据,设置任何接口对象的值,以及   准备要显示的界面。不要使用willActivate   初始化您的接口控制器。 willActivate方法是   在界面显示在屏幕上之前不久调用,所以你   应该只使用该方法进行最后一分钟的更改。例如,   您也可以使用该方法启动动画或启动其他动画   只有在界面在屏幕上时才会发生的任务。

那么,您使用什么方法来实例化计时器?

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

希望这有帮助

答案 2 :(得分:0)

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

相关问题