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

Hel*_*lbo 12 cocoa

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

Jas*_*oco 35

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

对于Mac OS X,您必须执行Tom Dalling建议的操作,但您还应该自己跟踪系统时钟更改(以更新计时器)以及更改当前时区.


Tom*_*ing 13

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

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

诀窍是让NSDate一套到午夜.查看日期和时间编程指南,了解如何使用日期组件等.

编辑:看到这个问题,如何获得午夜NSDate.


小智 12

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

  • 谢谢!这也适用于Mac OS X,截至10.9(Mavericks).比创建NSTimer要好得多. (2认同)

Dav*_*e G 5

正如其他人提到的,在 iOS 8 中,您可以使用 NSCalendarDayChangedNotification。关于如何做到这一点,这篇文章为您提供了更多信息。

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

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

其中“ViewController”是我的一个类的类名,“dayChangedOperations”是我想要在日期更改时运行的函数的名称。

计算自上次更改以来的天数

请注意,您从中得到的只是日期更改的警报。您不会获得自应用程序上次运行以来的天数。因此,请记住每次运行此函数时将日期保存到 userDefault 中,以便稍后使用它进行比较。