0

以下是我的注册代码

self.signedUp  = signUpButtonTap.withLatestFrom(userAndPassword).flatMapLatest{
            input ->  Observable<Response> in
            return  Observable.create { observer in
                let userData = Creator()
                userData?.username = input.0
                userData?.password = input.1
                provider.request(.signIn(userData!)).filter(statusCode: 200).subscribe{  event -> Void in

                    switch event {
                    case .next(let response):
                        observer.onNext(response)

                    case .error(let error):
                        let moyaError: MoyaError? = error as? MoyaError
                        let response: Response? = moyaError?.response
                        let statusCode: Int? = response?.statusCode
                        observer.onError(error)

                    default:
                        break
                    }

                }
                return Disposables.create()
            }
        }

以下是视图中的绑定

 self.viewModel.signedUp.bind{response in
               self.displayPopUpForSuccessfulLogin()
            }

当有一个成功的响应时,它的工作正常。

但是,当请求超时或我收到 200 以外的任何其他状态代码时,我收到以下错误“fatalError(lastMessage)”并且应用程序崩溃。

当我在 case .error 中将observer.onError(error) 替换为observer.onNext(response) 时,它适用于200 以外的响应代码,但在请求超时时再次崩溃。

我已经结合绑定到 tableView (Moya, RxSwift, RxCocoa) 完成了这个链接处理网络错误

谁能帮我解决问题。我对 RxSwift 完全陌生。任何帮助将不胜感激。谢谢

4

1 回答 1

0

如果provider.request(.signIn(userData!)) // ...在某个后台线程上返回结果,结果将绑定到后台线程中的 UI 元素,这可能导致非确定性崩溃。

它应该是

provider.request(.signIn(userData!))
            .observeOn(MainScheduler.instance) // ...

根据RxSwift github 提示:Drive

于 2019-05-08T09:55:03.467 回答