检查日期是否已过 - Swift

问题描述:

好吧,标题几乎说明了一切。我正在尝试做的是检查日期是否已过。因此,举个例子,让我们说一个用户正在使用我的应用程序,然后他们在早上上床检查我的应用程序。当我的应用程序打开时,我需要检查一天是否已经改变。检查日期是否已过 - Swift

此外,当应用程序被终止或在后台或任何东西时,我并不需要知道这些信息。我只需要知道应用程序运行时的日期是否已更改,并且用户实际上正在与其进行交互。

注:我看过其他堆栈溢出帖子有关这个问题,但他们都没有帮助过我。

+0

“天变了”是什么意思?你的意思是_date_已经改变了吗? – matt

+0

@matt是的,抱歉让我更新问题。 – Harish

实施观察

NSCalendarDayChangedNotification 

发布时所确定 由系统日历,语言环境和时区的系统更改日历日。这个通知没有提供对象, 。

如果设备在白天发生变化时睡着,此通知 将在唤醒时发布。如果设备已经睡了多天,只有一个通知会在 唤醒上发布。

观察员收到本通知 的时间并不能保证。因此,您不应该依赖在任何精确时间发布或接收此通知。

该通知通过[NSNotificationCenter defaultCenter]发布。

实施例:

applicationDidFinishLaunching添加

NSNotificationCenter.defaultCenter().addObserver(self, selector:"calendarDayDidChange:", name:NSCalendarDayChangedNotification, object:nil) 

且实施方法

func calendarDayDidChange(notification : NSNotification) 
{ 
    doSomethingWhenDayHasChanged() 
} 

或使用块API。

如果包含观察者的类不是应用程序委托类,则可以在某个时间删除观察者。

+0

啊哈,谢谢你的帮助,这对我很有帮助! – Harish

+0

此外,我尝试这个代码'让noteCenter = NSNotificationCenter.defaultCenter() 令观察者= noteCenter.addObserverForName(NSCalendarDayChangedNotification,对象:无,队列:NSOperationQueue.currentQueue(),usingBlock:{ 通知中心在 })'。我如何执行查询? – Harish

+0

这只适用于如果您的应用程序在日期更改的午夜时间运行。如果设备被锁定和/或您的应用程序被暂停,这将无法使用。马特的方法,在被删除的答案中,更适合OP的问题。将NSDate保存为暂停事件中的用户默认值,然后下次启动或返回前台时,请阅读保存的日期,使用NSCalendar查看日期是否已更改,然后您将继续。 –