在Cocoa中,是否有我可以注册的通知,通知我,新的一天开始时 - 早上00:00:00:01?
答案 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,以便稍后用它进行比较。