realm::IncorrectThreadException:从错误线程访问的领域(使用ReactiveSwift)

realm::IncorrectThreadException:从错误线程访问的领域(使用ReactiveSwift),swift,realm,reactive-swift,Swift,Realm,Reactive Swift,我有一个视图模型,它从我的API中获取一些数据,当我获取数据时,我将在领域和视图模型上的两个可变属性上设置它 userService.getBrowseData().on( failed: { error in // TODO: Should call a closure the VC passes in here with an error to show }, value: { banners,

我有一个视图模型,它从我的API中获取一些数据,当我获取数据时,我将在领域和视图模型上的两个可变属性上设置它

        userService.getBrowseData().on(
            failed: { error in
                // TODO: Should call a closure the VC passes in here with an error to show
            }, value: { banners, lists in
                browseStoreService.store(banners: banners, lists: lists)

                self.banners.value = banners
                self.lists.value = lists
            }
        ).startWithCompleted { self.dataLoaded.value = true }
在我的视图控制器中,我在实例化和设置
ListViewModel

disposable += viewModel?.dataLoaded.producer
    .observe(on: UIScheduler())
    .startWithValues { loaded in
        if loaded {
            guard let viewModel = self.viewModel else { return }

            self.carousel?.reloadData()

            for list in viewModel.lists.value {
                let view = ListView()
                view.viewModel = ListViewViewModel(list: list)
                view.listViewDelegate = self
                view.listItemViewDelegate = self

                scrollingStackView.addArrangedSubview(view: view)

                constrain(view) { view in
                    view.width == view.superview!.width
                    view.left == view.superview!.left
                    view.right == view.superview!.right
                }
            }
        }
}
对我来说奇怪的是,我只是在领域中设置数据,我没有做任何额外的获取来获取领域外的数据,这会导致崩溃,特别是在写入尚未完成的情况下

在本例中,我从API的响应中获取了一个
横幅数组
和一个
列表数组
,将它们发送到我的
storeService
中,将它们设置在领域中,并将这些相同的数组分配给它们各自的可变属性

知道是什么导致了这次事故吗

编辑:

store
函数如下所示:

func store(banners: [Banner], lists: [List]) {
        let realm = try! Realm()

        do {
            try realm.write {
                realm.add(banners, update: true)
                realm.add(lists, update: true)
            }
        } catch {
            return
        }

        realm.refresh()
    }

两个模型都有一个主键
id

,我通过在主线程上进行领域写入找到了一个修复方法。不确定是否有更好的方法来解决这个问题,但这是一个解决方案即使只是读取属性,也无法跨线程访问领域对象。如果它在主线程上工作,则意味着您必须存储对最初在主线程上创建的领域对象的引用。您应该能够设置一个异常断点来跟踪导致异常的代码行,并查看哪个领域对象导致了问题。此外,如果您还没有使用它,那么可能值得检查RxRealm(),以便以这种方式将领域集成到反应式UI中。:)我使用的是ReactiveSwift,而不是RxSwift