我有一个视图模型,它从我的 API 获取一些数据,当我取回数据时,我在 Realm 和视图模型上的两个 MutableProperties 中设置它
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 }
在我的视图控制器中,我在实例化并设置ListViewViewModel
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 的响应中获取一个数组banners
和一个数组lists
,将它们发送到我storeService
的域中以将它们设置为领域,并将这些相同的数组分配给它们各自的 MutableProperties。
知道这里会发生什么导致这次崩溃吗?
编辑:
该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