【问题标题】:Is it possible to save the state of a timer in the User Defaults?是否可以在用户默认值中保存计时器的状态?
【发布时间】:2009-10-19 10:19:15
【问题描述】:

我有一个显示倒计时的标签。

现在,如果我关闭我的应用程序,计时器将关闭,标签的文本也将关闭。我知道我们可以保存标签的文本值。但是我们如何在应用重新启动时显示正确的倒计时。

假设我在 3 分钟后在 00:05:35 关闭,当应用再次启动时,标签应该显示 00:02:35,并且计时器应该在那里用于剩余倒计时

【问题讨论】:

    标签: objective-c iphone-sdk-3.0 nsuserdefaults nstimer


    【解决方案1】:

    是的,只需在 NSUserDefaults 中存储您的应用关闭的时间和剩余的倒计时时间。当应用程序再次启动时,您会从 NSUserDefaults 获得关闭时间和剩余时间。使用当前时间,可以通过简单的数学运算来计算倒计时剩余的更正时间。

    这样的事情可能会奏效,当然未经测试:

    // save state
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSDate *now = [NSDate date];
    double countDown = 45.0; // in seconds, get this from your counter
    [userDefaults setObject:now forKey:@"timeAtQuit"];
    [userDefaults setDouble:countDown forKey:@"countDown"];
    [userDefaults synchronize];
    
    
    // restore state
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSDate *timeAtQuit = [userDefaults objectForKey:@"timeAtQuit"];
    double timeSinceQuit = [timeAtQuit timeIntervalSinceNow];
    double countDown = timeSinceQuit + [userDefaults doubleForKey:@"countDown"];
    
    【解决方案2】:

    或者您可以只计算您希望它过期的日期/时间 (NSDate) 并将其保存在您的默认值中。重新启动时与该日期进行比较,以了解它是否已过期,或者您是否需要设置一个计时器来捕捉未来的过期时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多