【问题标题】:RxSwift subscriptions after didBecomeActivedidBecomeActive 之后的 RxSwift 订阅
【发布时间】:2019-10-30 17:20:57
【问题描述】:

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

它们在订阅内设置为基于 BehaviorSubjects 的 observable,内部视图:

    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 类型的属性图像不为零,但它们消失了。我可以收听通知didBecameActive 并在观察者上调用onNext,但我不确定这是找出问题的正确方法。知道这是什么原因吗?

【问题讨论】:

    标签: ios swift rx-swift


    【解决方案1】:

    最后,我解决了这个问题。原因与 Rx 无关。在 didBecomeActive 和清除 myView 之后调用方法绘制图片 draw(_:CGRect)。我改变了方法的主体,现在一切正常:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多