我正在开发一个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)中,计时器有时无法启动或有时启动但只有一次,之后似乎冻结了!我看到了这一点,因为我在显示计数器的每个经过时间段更新手表中的标签,我确信所有都在“将激活”功能中初始化。我不明白为什么。有人有同样的问题吗?
答案 0 :(得分:2)
我有一个非常类似且同样令人沮丧的问题,主计时器有一个警报计时器定期关闭。在模拟器中完美运行,但不在手表上。我听到开始声音,然后有时是第一个警报然后什么都没有。我用按钮启动计时器,而不是手表启动时。我在手机的已发布应用程序上运行的代码类型相同,显然有效。 我只是找不到解决方案。令人难以置信的令人沮丧。您是否在解决问题方面取得了进一步的成功?
答案 1 :(得分:1)
使用你的接口控制器的init和awakeWithContext:方法来 加载任何所需的数据,设置任何接口对象的值,以及 准备要显示的界面。不要使用willActivate 初始化您的接口控制器。 willActivate方法是 在界面显示在屏幕上之前不久调用,所以你 应该只使用该方法进行最后一分钟的更改。例如, 您也可以使用该方法启动动画或启动其他动画 只有在界面在屏幕上时才会发生的任务。
那么,您使用什么方法来实例化计时器?
确保使用willActivate
方法,并使用didDeactivate
方法清理界面并将其置于静止状态。例如,使用此方法使计时器无效并停止动画。
希望这有帮助
答案 2 :(得分:0)
Watch OS 2.1解决了我的问题。这个问题与手腕的快速移动有关:随着WatchOS的最新更新,所有计时器在快速移动后正确恢复并且一切正常