如何检测 Swift 中的日期变化
How to detect day change in Swift
我希望我的应用在另一天发生变化时采取行动。
所以,在我的 appDelegate 中,我输入了
func applicationSignificantTimeChange(_ application: UIApplication){
//this one fires
}
在应该更新其内容的 ViewController 中,我这样做:
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(self.dayChanged(notification:)), name: Notification.Name("significantTimeChangeNotification"), object: nil)
}
和
@objc func dayChanged(notification: NSNotification){
//this one doesn't fire
}
不知何故,当 AppDelegate 中的函数被调用时,观察者似乎对该事件视而不见。
这是语法,还是对机制的简单误解?
您需要为 UIApplicationSignificantTimeChangeNotification
添加一个观察者:
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: UIApplicationSignificantTimeChangeNotification, object: nil)
对于Swift 4.2 或更高版本
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: UIApplication.significantTimeChangeNotification, object: nil)
注意:如果您的意图是在日期更改时收到通知,您可以使用 .NSCalendarDayChanged
而不是 UIApplication.significantTimeChangeNotification
。
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: .NSCalendarDayChanged, object: nil)
并将选择器方法添加到您要监视日期变化的视图控制器中:
@objc func dayChanged(_ notification: Notification) {
}
我希望我的应用在另一天发生变化时采取行动。
所以,在我的 appDelegate 中,我输入了
func applicationSignificantTimeChange(_ application: UIApplication){
//this one fires
}
在应该更新其内容的 ViewController 中,我这样做:
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(self.dayChanged(notification:)), name: Notification.Name("significantTimeChangeNotification"), object: nil)
}
和
@objc func dayChanged(notification: NSNotification){
//this one doesn't fire
}
不知何故,当 AppDelegate 中的函数被调用时,观察者似乎对该事件视而不见。
这是语法,还是对机制的简单误解?
您需要为 UIApplicationSignificantTimeChangeNotification
添加一个观察者:
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: UIApplicationSignificantTimeChangeNotification, object: nil)
对于Swift 4.2 或更高版本
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: UIApplication.significantTimeChangeNotification, object: nil)
注意:如果您的意图是在日期更改时收到通知,您可以使用 .NSCalendarDayChanged
而不是 UIApplication.significantTimeChangeNotification
。
NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: .NSCalendarDayChanged, object: nil)
并将选择器方法添加到您要监视日期变化的视图控制器中:
@objc func dayChanged(_ notification: Notification) {
}