gpt4 book ai didi

ios - 使用mvvm模型的RxMoya请求总是在observer.onError(error)中崩溃

转载 作者:行者123 更新时间:2023-11-30 12:01:39 25 4
gpt4 key购买 nike

以下是我的注册代码

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()
}
}

以下是View中的绑定(bind)

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

当有成功的响应时,它就可以正常工作。

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

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

我已经浏览过这个链接Handling Network error in combination with binding to tableView (Moya, RxSwift, RxCocoa)

任何人都可以帮我解决问题吗?我对 RxSwift 完全陌生。任何帮助将不胜感激。谢谢

最佳答案

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

应该是

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

根据RxSwift github tips: Drive

关于ios - 使用mvvm模型的RxMoya请求总是在observer.onError(error)中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47143880/

25 4 0
文章推荐: ios - 更改表格宽度时,Swift Tableview 会向上移动
文章推荐: java - 我可以从网页执行 shell 脚本吗?
文章推荐: java - 使用 Jama.Matrix 测试可逆性
文章推荐: javascript - for 在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com