问题描述
我想显示一个监听downloadFinished()
方法的模式,然后在ui线程中显示该模式。
在我的ManagerClass
的onCompleted块中,所有下载都结束了,我正在监听所有事件:
...
onCompleted: {
Log.db.info(message: "Download successful!")
try? self.downloadManager?.endDownload()
AppEvents.downloadFinished.emit()
})
emit()
就是:
dispatchQueue.main.async {
NotificationCenter.default.post(name:self.name(),object:nil)
}
import RealmSwift
class MessagesManager {
private var syncDBManager: SyncDBManager?
static let shared = MessagesManager()
init() {
_ = NotificationCenter.default.rx.notification(AppEvents.syncFinished.name())
.subscribe(onNext: { _ in
self.showModal()
})
showModal()
}
private func showModal() {
//show modal
}
}
当调用?AppEvents.downloadFinished.emit()`时,如何调用showModal()
?
NotificationCenter
不应该听吗?
当我将 MessagesManager 的实例添加到 AppDelegate 的 didFinishLaunchingWithOptions 方法中时:
_ = MessageManager.shared
模态出现一秒钟然后消失。但是我认为此时它显示为时已晚,因为下载过程已经以 AppEvents.downloadFinished.emit() 结尾。
解决方法
我从未使用过RxSwift,但是我很确定NotificationCenter.defau...
返回的是Combines AnyCanclable
。您需要将引用保存在某处,因为否则您的init()
完成后,订阅就消失了。如果它像合并的方式工作,请尝试以下操作:
private var cancelable: Disposable?
init() {
...
cancelable = NotificationCenter.default.rx.notification(AppEvents.syncFinished.name())
.subscribe(onNext: { _ in
self.showModal()
})
...
}
修改:
根据{{3}},您需要Rx'Cancelable
被称为Disposable