如何在swift中处理日期更改事件?
我想在日期更改时创建一组通知。
var localNotification: UILocalNotification = UILocalNotification()
localNotification.alertAction = "Testing notifications on iOS8"
localNotification.alertBody = " Woww it works!!"
localNotification.fireDate = date
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
答案 0 :(得分:2)
您可以订阅UIApplicationSignificantTimeChangeNotification
。这一天应该在白天变化时开火。
不幸的是,这个也会在其他场合发射。因此,您应该存储一个静态变量,其中包含上次触发此通知的日期,然后检查它是否实际更改了天。
我不知道你会用它做什么,但在大多数情况下,人们正在寻找一般重大时间变化。
答案 1 :(得分:1)
您可以执行localNotification.fireDate = NSDate(timeIntervalSinceNow: 1)
,它会在当前日期的1天内通知您。这可以根据您的喜好进一步定制,具体取决于您希望时间的具体程度。
编辑:正如评论中指出的那样,timeIntervalSinceNow
以秒为单位计算,因此1将是一秒,而不是一天。
编辑2:试图回答被问到的问题。如果你想在每天午夜创建通知......
首先,创建一个NSCalendar
对象
var calendar = NSCalendar()
var calendarComponents = NSDateComponents()
calendarComponents.setDay(29)
calendarComponents.setMonth(6)
calendarComponents.setYear(2015)
calendarComponents.setHour(12)
calendarComponents.setSeconds(0)
calendarcomponents.setMinutes(0)
calendar.setTimeZone(NSTimeZone.defaultTimeZone)
var dateToFire = calendar.dateFromComponents(calendarComponents)
现在我们可以每天安排通知。
localNotification.fireDate = dateToFire
localNotification.setTimeZone(NSTimeZone.defaultTimeZone)
localNotification.setRepeatInterval(kcfCalendarUnitDay)
语法可能不完美,我是从Obj-C翻译的,但你应该得到一般的想法。
答案 2 :(得分:0)
尝试为setFilterByAuthorizedAccounts(false)
添加观察者
仅当应用程序处于前台时才会触发的缺点