Я хочу, чтобы мое приложение работало, когда есть переход к другому дню.
Итак, в моем 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)
Хорошая точка зрения. Я постараюсь. Кроме того, очевидно, что часть AppDelegate вообще не нужна
Да, обычно вам не нужно использовать метод AppDelegate. Правильный подход - добавить наблюдателя и реализовать метод экземпляра в вашем контроллере представления.
@Sjakelien, обратите внимание, что вам может понадобиться
.NSCalendarDayChanged
вместоUIApplication.significantTimeChangeNotification