所以我一直在研究如何判断我的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
}
目标是在每天更改开始时触发此通知。上面的代码会实现我正在寻找的行为吗?
答案 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
checkDayChange
和applicationDidFinishLaunching
applicationDidBecomeActive