我有2个viewControllers在我的应用程序,从第一个视图,当我导航到下一个有一个名为startTimer的按钮与一个定时器动作作为选择器方法点击startTimer计时器启动HH:mm:ss格式,我不是无效的计时器,但当我回到第一viewController和再次如果我再次来到第二viewController,如果我按下startTimer按钮计时器再次从0开始,但我希望它保留以前的值,我怎么能做到这一点?我知道,因为我再次加载viewController的笔尖将被加载到内存,但我怎么能保留计时器的标签和计时器的价值? 任何帮助提前感谢,谢谢。如何保持NSTimer活着?
回答
不要这样做,这种方式每次加载包含NSTimer的视图时,都会创建一个新的NSTimer对象,而旧的对象仍在内存中,因为您没有使其失效。
最好的方法是,您必须将NSTimer放入应用程序委托中,然后仅在第一次加载该View Controller时才启动它。
为了实现这一点,您必须添加一个标志来检查视图是否第一次加载。
如果NSTimer是你的实例变量之一,我想你可以做一个检查,看看它是否被分配。
//NSTimer *timer; declare this in your interface
if (timer==nil)
{
// allocate timer
}
//Do nothing if it is allocated all ready
您已经通过将数据放入视图控制器来打破MVC(模型 - 视图 - 控制器)。而且,你所要求的机制没有关于时间的坚定承诺(NSTimer
)来跟踪你的时间。 NSTimer
不会在请求的时间间隔内触发恰好为。它可以在该时间间隔之后的任意点触发。
使用
(最后一点被夸大了,一个重复的计时器正确地调度自己,所以通常不会浪费时间,如果重复被完全跳过,在长时间滚动或其他可以保持定时器触发的事件中, )NSTimer
作为秒表几乎总是会失去时间(有时相当长时间,特别是如果有滚动视图时)。
创建一个新的模型对象来保存秒表信息。我们称之为Stopwatch
。假设你需要它可以启动和停止,它需要一个NSTimeInterval accumulatedTime
属性和一个NSDate lastStarted
属性(如果你愿意,你也可以使lastStarted
为)。因此,要启动秒表,请将lastStarted
设置为“now”。要停止秒表,请清除lastStarted
并将当前累计时间移至accumulatedTime
。要查看当前时间,请将accumulatedTime
添加到now - lastStarted
。
好的,现在你已经有了,你可以用它做什么?您可以将它传递给您的视图控制器,他们可以询问“当前秒表值是多少?”他们可以随意启动和停止它。
现在你的视图控制器想要每秒更新它的显示,所以你有一个计时器来做到这一点。它每秒钟都会询问秒表“当前时间是什么”,并显示它。但它没有设置的时间。它只是问。
顺便说一下,你也可以在Stopwatch
上使用KVO,但它有点棘手,因为Stopwatch
需要运行自己的计时器来发送更改通知。我通常觉得比它的价值更麻烦。
我会做的是将第二个视图控制器作为您的第一个视图控制器的ivar。这样,您可以仅实例化一次,并且您的NSTimer将保留在内存中。但是,如果你想保持你的风格,你应该保存当前时间的任何一种喜好(看[NSUserDefaults standardUserDefaults]
或创建你自己的单身人士课程)。然后在视图中从你的第二个视图控制器加载方法,加载该值并将其添加为您的定时器的偏移量。
希望能帮到你!
- 1. 如何保持活着请求
- 2. 如何保持HTTP连接活着?
- 3. 保持父进程活着
- 4. 保持会话活着
- 5. 保持机器人活着
- 6. 保持会话活着MVC3
- 7. 保持会话活着C#
- 8. 保持连接活着吗?
- 9. 保持PInvoked方法活着
- 10. 保持WebSocket连接活着
- 11. 如何确保或保持套接字活着?
- 12. 保持基本授权活着HttpURLConnection的
- 13. 保持我的进程活着 - 总是
- 14. 试图保持代表活着
- 15. Python - BaseHTTPServer保持活着不起作用
- 16. 在使用Quartz.Net时保持kestrel活着
- 17. 保持Facebook会话活着吗?
- 18. 保持活着的Rtsp连接
- 19. 保持Java蓝牙连接活着
- 20. node.js保持活着的网页
- 21. 使用webclient保持会话活着
- 22. 保持远程桌面会话“活着”
- 23. tcp保持活着基本查询
- 24. 在Ruby脚本中保持sudo活着
- 25. 在IIS下保持WCF服务活着
- 26. 保持元素活着?浏览网站?
- 27. 使用bindService保持android服务活着
- 28. 保持一个Excel COM对象活着
- 29. Python的保持插座连接活着
- 30. Android保持数据天线活着