gpt4 book ai didi

ios - didBecomeActive 后的 RxSwift 订阅

转载 作者:行者123 更新时间:2023-11-29 05:21:38 24 4
gpt4 key购买 nike

我已经用 Viewcontroller 和 ViewModel 编写了基于 RxSwift 的模块。 ViewModel 包含手势观察者和图像观察者。一切正常,除了应用程序直接到上述模块的情况。手势订阅不起作用,imageView 变为空白。

它们是根据BehaviorSubjects在可观察的订阅中设置的,内部 View :

    func subscribePhotos(observerable: Observable<[(Int, UIImage?)]>) {
disposeBag = DisposeBag()
observerable.subscribeOnNext { [weak self] array in
array.forEach { identifier, image in
if let pictureView = self?.subviews.first(where: { view -> Bool in
guard let view = view as? PictureView else {
return false
}
return view.identifier == identifier
}) as? PictureView {
pictureView.set(image)
}
}
}.disposed(by: disposeBag)
}

在viewModel中我设置了Observable:

var imagesObservable: Observable<[(Int, UIImage?)]> {
do {
let collection = try photosSubject.value()
if let photosObservables = collectionCreator?.getPhotosDetailsObservables(identifiers: collection.photoIdentifiers) {
let photosObservable = Observable.combineLatest(photosObservables)
return Observable.combineLatest(photosSubject, photosObservable,
resultSelector: { collection, currentArray -> [(Int, UIImage?)] in
var newArray = [(Int, UIImage?)]()
currentArray.forEach { stringIdentifier, image in
if let picture = grid.pictures.first(where: { $0. stringIdentifier == stringIdentifier }) {
newArray.append((picture.identifier, image))
}
}
return newArray
})
}
} catch { }
return Observable<[(Int, UIImage?)]>.never()
}

}

photosSubject 在 vi​​ewModel 的 init 中初始化

        photosSubject = BehaviorSubject<PictureCollection>(value: collection)

照片观察

    func createImageObservableForAsset(asset: PHAsset, size: CGSize) -> Observable<UIImage?> {
return Observable.create { obs in

PHImageManager.default().requestImage(for: asset,
targetSize: size,
contentMode: .aspectFit,
options: nil,
resultHandler: { image, _ in
obs.onNext(image)
})

return Disposables.create()
}
}

在 ViewController 中,我通过调用 View 方法连接它们:

        myView.pictureView.subscribePhotos(observerable: viewModel.imagesObservable)

didBecameActive之后,pictureViewUIImage类型的属性图像不是nil,但是它们消失了。我可以监听通知 didBecameActive 并在观察者上调用 onNext ,但我不确定这是否是解决问题的正确方法。知道这是什么原因吗?

最佳答案

终于解决了这个问题。 Reason 与 Rx 无关。 didBecomeActive后调用了绘制图片的方法draw(_:CGRect)并清除了myView。我更改了方法的主体,现在一切正常:)

关于ios - didBecomeActive 后的 RxSwift 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58630696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com