我想使用UIApplicationSignificantTimeChange
检查当天的变化,并将其封装在我自己的类中,以便在更多视图控制器中轻松使用它:
public final class DayChangedObserver {
private var token: NSObjectProtocol!
public init?(handler: @escaping () -> ()) {
token = NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationSignificantTimeChange, object: self, queue: nil) { _ in
handler()
}
}
deinit {
NotificationCenter.default.removeObserver(token)
}
}
我从我的视图控制器调用此代码:
override func viewDidLoad() {
super.viewDidLoad()
_ = DayChangedObserver() {
print("Day has changed")
}
}
我在iPhone上测试这个,我手动更改时间。但似乎它使用我的班级不起作用。
我的实施有问题吗?因为它在我过去使用此事件时正在工作(没有我自己的类实现)。
EDIT1:
我似乎紧接着调用deinit
,因此我使用实例变量来保持强引用,现在它不再是deinit
,但仍然不起作用。
答案 0 :(得分:0)
object: self
更改为object: nil
,尝试一下。