新的一天开始时,我可以收到通知吗?

时间:2010-05-30 13:29:27

标签: cocoa

在Cocoa中,是否有我可以注册的通知,通知我,新的一天开始时 - 早上00:00:00:01?

4 个答案:

答案 0 :(得分:35)

如果是用于iPhone开发,您还可以收听UIApplicationSignificantTimeChangeNotification。它会在比午夜到来的更多场合发布,但是当你收到一个时,你只需检查你是否在午夜或接近午夜。

对于Mac OS X,您必须执行Tom Dalling建议的操作,但您还应该自己跟踪changes to the system clock(以更新计时器)以及changes to the current time zone

答案 1 :(得分:13)

我不知道通知。每当新的一天开始时,您都可以获得一个计时器:

[[NSTimer alloc] initWithFireDate:midnight
                         interval:60 * 60 * 24 //one day, in seconds
                           target:someObj
                         selector:@selector(someSelector)
                         userInfo:nil
                          repeats:YES];

诀窍是将NSDate设置为午夜。检查Date and Time Programming Guide,了解如何使用日期组件等。

编辑:有关如何获取午夜NSDate的问题,请参阅this

答案 2 :(得分:12)

从iOS8开始,您还可以直接收听NSCalendarDayChangedNotification。

答案 3 :(得分:3)

如其他人所述,在iOS 8中,您可以使用NSCalendarDayChangedNotification。就如何做到这一点而言,post为您提供了更多信息。

基本上NSCalendarDayChangedNotification要求您转到appDelegate文件并在app中插入以下代码(改编自Swift 3指南):

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.dayChangedOperations(notif:)), name:NSNotification.Name.NSCalendarDayChanged, object:nil)

Where" ViewController"是我的一个类的类名和" dayChangedOperations"是每天更改时我想要运行的函数的名称。

自上次更改以来的天数

请注意,您从中获得的是当天发生变化的提醒。您没有获得应用上次运行后的天数。所以请记住每次运行此函数时都要将日期保存到userDefault,以便稍后用它进行比较。