问题描述
就在致电 self.window?.close()
之前,我向 NotificationCenter.default.post(name: Notification.Name("frameCaptured"),object: nil)
发布通知。通知的选择器可能需要一些时间才能完成。所以即使选择器不完整,我也想关闭窗口。这是可能的还是我应该以另一种方式解决这个问题?
解决方法
由于 close()
必须在主线程上运行,您需要做的就是将一个块排队以在不久的将来发布通知:
DispatchQueue.main.async {
NotificationCenter.default.post(name: Notification.Name("MyNotification"),object: self);
}
self.window?.close()
通知代码将在未来的某个主循环中执行。直到当前主循环上的所有代码都完成后才能启动,但会在所有挂起的主循环事件都赶上后立即运行,这很可能是紧随其后。