4

コードのこの部分でクラッシュが発生しました:

SRNetwork.provider
        .request(SRService.postData(user_id: userId))
        .mapArray(STrain.self)
        .observeOn(ConcurrentDispatchQueueScheduler.init(queue: SDispatchQueue.dataTrain.getQueue()))
        .subscribe({ (event) -> Void in
            switch event {
            case .next(let response):
                self.train.value = response
                SRealmTrain.sharedInstance.cacheTrain(response)
            case .error(let error):
                SRealmTrain.sharedInstance.fetchTrainRx(userId) //CRASH IS HERE
                    .bindTo(self.train)
                    .addDisposableTo(self.disposeBag)
                print("\(error)")
            default: break;
            }
        })
        .addDisposableTo(disposeBag);

問題は、私がMainScheduler.instancerxRealm を監視していないことだと思いますmain threadが、私はそれを望んでいません。それを修正することは可能ですか?

fetchTrainRx :

public func fetchTrainRx(_ userId: String) -> Observable<[STrain]> {

    let predicate = NSPredicate(format: "userId == %@", userId)

    if let realm = realm {

        return Observable.from(realm
            .objects(SRTrain.self)
            .filter(predicate)
            .sorted(byProperty: "order", ascending: true))
            .map ({
                $0.map(STrain.init)
        })
    }
    return Observable.just([]);
}
4

1 に答える 1