处理 Observable.subscribe 的结果时未调用 OnNext
Posted
技术标签:
【中文标题】处理 Observable.subscribe 的结果时未调用 OnNext【英文标题】:OnNext not called when disposing the result of Observable.subscribe 【发布时间】:2017-09-12 14:28:31 【问题描述】:我订阅了一个 observable,但如果我将一次性添加到我班级的 DisposeBag
中,则永远不会调用 onNext
块。
这是我的代码:
@objc class AppleMusicPlaylistManager: NSObject
let disposeBag = DisposeBag()
let playlists: [MPMediaPlaylist] = []
func importAppleMusicPlaylist()
playlists.forEach applePlaylist in
applePlaylist.getItunesStoreTracks().subscribe(onNext: tracks in
// Doing things here
).addDisposableTo(disposeBag)
其中getItunesStoreTracks
返回一个RxSwift.Observable<[SoundsMusicITunesStore]>
,整个事情就像AppleMusicPlaylistManager().importAppleMusicPlaylist()
一样使用
【问题讨论】:
因为你的subscribe
返回一个 disposable
只是将它分配给某个变量,然后当你的对象得到 deinit
时处理它
@Lamar 根据我对 RxSwift 的理解,这正是 DisposeBag
正在做的事情。我在这里错过了什么吗?
【参考方案1】:
一切都按预期工作。
disposeBag
的当前逻辑指出,在disposeBag
存活之前,不会处理可观察对象。
在您的情况下 - AppleMusicPlaylistManager().importAppleMusicPlaylist()
,您创建了一个管理器,然后调用异步请求,而管理器正在解除分配。因此所有的 observables 也在释放。
为了使其正常工作,您必须将此管理器设置为 shared
并使用此方法:AppleMusicPlaylistManager.shared.importAppleMusicPlaylist()
或将此管理器保存到某个属性,以免立即解除分配。
【讨论】:
以上是关于处理 Observable.subscribe 的结果时未调用 OnNext的主要内容,如果未能解决你的问题,请参考以下文章