【发布时间】:2010-05-30 13:29:27
【问题描述】:
在 Cocoa 中,是否有我可以注册的通知,通知我新的一天何时开始 - 早上 00h:00min:01s?
【问题讨论】:
标签: cocoa
在 Cocoa 中,是否有我可以注册的通知,通知我新的一天何时开始 - 早上 00h:00min:01s?
【问题讨论】:
标签: cocoa
如果是iPhone开发,也可以收听UIApplicationSignificantTimeChangeNotification。它发布的次数比午夜的到来更多,但是当你收到一个时,你可以简单地检查一下你是在午夜还是接近午夜。
对于 Mac OS X,您必须按照 Tom Dalling 的建议进行操作,但您还应该自己跟踪 changes to the system clock(以便更新您的计时器)以及 changes to the current time zone。
【讨论】:
据我所知,没有任何通知。每当新的一天开始时,您都可以设置一个计时器,如下所示:
[[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,了解如何使用日期组件等来执行此操作。
编辑:请参阅 this 问题了解如何获得午夜 NSDate。
【讨论】:
从iOS8开始,也可以直接监听NSCalendarDayChangedNotification。
【讨论】:
正如其他人所说,在 iOS 8 中您可以使用 NSCalendarDayChangedNotification。至于如何做到这一点,post 会为您提供更多信息。
本质上,NSCalendarDayChangedNotification 要求您转到您的 appDelegate 文件并在应用程序中插入以下代码(改编自 Swift 3 指南):
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.dayChangedOperations(notif:)), name:NSNotification.Name.NSCalendarDayChanged, object:nil)
其中“ViewController”是我的一个类的类名,“dayChangedOperations”是我想在一天变化时运行的函数的名称。
计算自上次更改以来的天数
请注意,您从中得到的只是一天发生变化的警报。自应用程序上次运行以来,您没有得到多少天数。所以记得在每次运行这个函数的时候把日期保存到一个userDefault中,这样你以后可以用它来比较。
【讨论】: