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

Posted

技术标签:

【中文标题】iPhone SDK - 如何在应用程序关闭和重新打开时保存和恢复计时器标签【英文标题】:iPhone SDK - How to save and resume timer Label when app is closed and reopened 【发布时间】:2014-07-28 00:53:34 【问题描述】:

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

我注意到以下问题,但不知道如何解决:

    如果我启动计时器,然后通过单击主页按钮关闭应用程序,然后打开另一个应用程序并执行一些操作,然后重新打开我的应用程序,计时器标签不记得它停止的时间。我尝试在 viewdiddisappear 方法中保存结束的 NSDate,但我不确定何时恢复它,就好像我在应用程序仍处于打开状态时切换选项卡一样,它将被保存并且我不知道如何更新。 如果您开始计时,然后双击主页并强制关闭应用程序,则不会调用任何代码,因此我无法保存时间。那我怎么才能恢复呢?

知道如何解决这个问题吗?

谢谢。

【问题讨论】:

【参考方案1】:

在您的 .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 方法中处理计时器。

【讨论】:

以上是关于iPhone SDK - 如何在应用程序关闭和重新打开时保存和恢复计时器标签的主要内容,如果未能解决你的问题,请参考以下文章

如何提交在 iPhone OS 3 和 iPhone SDK 4 上运行的应用程序版本?

如何在iphone sdk中使用日期倒计时来计算天数[关闭]

iPhone上的文字转语音[关闭]

iPhone SDK 4.0 中的滑动手势? [关闭]

iphone/ios sdk:如果应用程序更新,如何删除/清除用户文件

iPhone SDK - 如何在 UIImagePickerController 中禁用图片预览?