mil*_*czi 1 realm swift rx-swift rx-cocoa
当我观察我的领域模型并将更改绑定到表视图时,它可以工作.但是当我尝试向表中添加行时,我发生了一些崩溃
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'尝试将第1行插入第0部分,但更新后第0部分只有1行'
我可以不使用标准委托方法吗?
这是我的代码片段
let realm = try! Realm()
let places = realm.objects(Place.self)
Observable.from(places)
.bindTo(tableView.rx.items(cellIdentifier: "PlaceCell", cellType: PlaceCell.self)) { (row, element, cell) in
let viewModel = PlaceCellViewModel(place: element)
cell.setup(viewModel: viewModel)
}
.addDisposableTo(disposeBag)
Observable.changesetFrom(places).subscribe(onNext: { [weak self] result, changes in
if let changes = changes {
self?.tableView.beginUpdates()
let indexes = changes.inserted.map { IndexPath(row: $0, section: 0) }
self?.tableView.insertRows(at: indexes, with: .bottom)
self?.tableView.endUpdates()
} else {
self?.tableView.reloadData()
}
})
.addDisposableTo(disposeBag)
Run Code Online (Sandbox Code Playgroud)
目前,您有两个订阅竞争对手更新您的表.
您的第一个订阅使用绑定到您的表视图(基本上reloadData()每次基础数据发生更改时调用)
您的第二个订阅也会更新您的表,但这次它使用细粒度的方法来插入记录.
因此,当第二个订阅启动时 - 您的第一个订阅已经更新了您的表,并且您收到崩溃的错误消息.
目前RxRealm中没有包装器可以在一个活页夹中包含精细的通知(你可以在RxRealm repo上创建一个关于它的问题!)
如果您希望对表行进行动画更改,则必须实现表视图数据源方法,如下所示:
https://github.com/RxSwiftCommunity/RxRealm/blob/master/Example/RxRealm/ViewController.swift#L74
更新#1:我想在此之后添加一段时间(以及其他类似问题)我开始创建一个RxRealmDataSources库,它的工作方式与vanilla RxDataSources库非常相似,但特别适用于绑定Realm类型.lib负责将RxRealm observable绑定到iOS和macOS上的表或集合视图,并使用必要的动画更新它们.
这是GitHub回购:https://github.com/RxSwiftCommunity/RxRealmDataSources
| 归档时间: |
|
| 查看次数: |
2716 次 |
| 最近记录: |