iPhone SDK - 如何在应用关闭并重新打开时保存和恢复计时器标签

时间:2014-07-28 00:53:35

标签: objective-c save nstimer

我有一个倒计时器,当你启动它时,它会创建一个通知并将其设置为在倒数计时器设置的时间内触发。我还启动了1秒计时器,以便在标签停机时更新标签。收到本地通知后,如果应用程序处于打开状态,我会点击didReceiveLocalNotification:(UILocalNotification *)通知功能,如果我没有在应用程序中弹出本地通知。如果我留在应用程序或只是关闭它,一切正常,就是这样。当我尝试使用多个应用程序进行多任务时会出现问题。

我注意到以下情况,我不知道如何解决它:

  1. 如果我启动计时器,然后点击主页按钮关闭应用程序,然后打开另一个应用程序并做一些事情然后再打开我的应用程序,计时器标签不记得它停止的时间。我尝试在viewdiddisappear方法中保存结束NSDate,但我不确定何时恢复它,好像我在应用程序仍处于打开状态时切换标签,它将被保存,我不知道如何更新。
  2. 如果您开始时间然后双击主页并强制关闭应用程序,则不会调用任何代码,因此我无法节省时间。我怎么能恢复呢?
  3. 知道如何解决这个问题吗?

    感谢。

1 个答案:

答案 0 :(得分:2)

你的.h文件中的

取这个对象。

NSTimer *gameTimer;
NSDate *pauseStart, *previousFireDate;

然后,在你的.m文件中暂停并保存计时器值而不是使用此代码

pauseStart = [NSDate dateWithTimeIntervalSinceNow:0] ;
previousFireDate = [gameTimer fireDate] ;
[gameTimer setFireDate:[NSDate distantFuture]];

然后,当您想要恢复计时器时,请使用此代码

float pauseTime = -1*[pauseStart timeIntervalSinceNow];
[gameTimer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];

然后,如果要存储背景和前景的转换,请使用NSUserDefaults存储计时器计数并使用它来暂停和恢复。您可以使用appdelegate操作来处理applicationDidEnterBackgroundapplicationWillEnterForeground中的此事件。

如果您在进入前台时处于同一视图中,则可以通过此代码在viewdidload方法中获取相关信息。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someAction) name:UIApplicationWillEnterForegroundNotification object:nil];

您可以使用someAction方法处理计时器。