检测iOS应用中的日期变化

时间:2017-04-12 18:50:08

标签: ios objective-c nscalendar

所以我一直在研究如何判断我的iOS应用程序是否是新的一天。基本上,我想在新的一天开始时将一堆值重置为0。我已经看到我可以使用" UIApplicationSignificantTimeChangeNotification"在午夜发送通知。但是,如果用户在上午9:00杀死应用程序并在第二天上午9:00再次打开应用程序,这仍然会触发吗?

我还看到我可以使用" NSCalendarDayChangedNotification"对我的理解有相同的行为。我唯一担心的是,即使在用户杀死应用程序之后,如果其中任何一个都能完成检测到一天的变化。

理想情况下,我想将通知观察器添加到viewDidLoad中我的.m文件的顶部,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetValues) name:UIApplicationSignificantTimeChangeNotification object:nil];

然后文件中的其他位置......

- (void)resetValues {

... // reset values to 0

}

目标是在每天更改开始时触发此通知。上面的代码会实现我正在寻找的行为吗?

1 个答案:

答案 0 :(得分:3)

NSUserDefaults

中保存整数值(日期)的解决方案
  • 在AppDelegate中创建方法checkDayChange,该方法将当前日期的day组件与NSUserDefaults中的已保存值进行比较(默认值为0)。如果值不相等,请致电resetValues并保存当前日期。

    - (void)checkDayChange
    {
       NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
       NSInteger currentDay = [[NSCalendar currentCalendar] component:NSCalendarUnitDay fromDate:[NSDate date]];
       NSInteger savedDay = [defaults integerForKey:@"day"]; // default is 0
       if (currentDay != savedDay) {
           [self resetValues];
           [defaults setInteger:currentDay forKey:@"day"];
       }
    }
    
  • 使用选择器NSCalendarDayChangedNotification

  • 观察checkDayChange
  • 也可以checkDayChangeapplicationDidFinishLaunching
  • 致电applicationDidBecomeActive