swift - 如何检测 Swift 中的日期变化

标签 swift observers

我希望我的应用在另一天发生变化时采取行动。

所以,在我的 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 ("NSCalendarDayChangedNotification") 而不是 UIApplication.significantTimeChangeNotification.

NotificationCenter.default.addObserver(self, selector: #selector(dayChanged), name: .NSCalendarDayChanged, object: nil)

然后将选择器方法添加到您想要监视日期变化的 View Controller 中:

@objc func dayChanged(_ notification: Notification) {
    
}

关于swift - 如何检测 Swift 中的日期变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53021632/

相关文章:

ios - GameKit 无法在 watchOS 3 上运行

swift - 委托(delegate)不断返回 nil

c# - .Net 中的响应式(Reactive)扩展 (C#) - Subject<T> 实例只处理一个订阅

javascript - ember 观察正在保存

swift - 在 Swift 中运行工作流程 (Mac)

ios - 谁创建并拥有调用堆栈以及调用堆栈如何在多线程中工作?

ios - reloadRowsAtIndexPaths 使用 JSON imageUrls 崩溃

javascript - Angular 2中如何在组件间正确共享服务数据

mysql - SQLSTATE[HY000] : General error: 2006 MySQL server has gone away on running cron job magento

swift - selector为静态方法时如何设置NotificationCenter的观察者