Open3
RxDataSources + Realm のはまったところメモ
オブジェクト削除時にクラッシュする
EditMode でオブジェクトを削除して、削除後のリロードでクラッシュする
Terminating app due to uncaught exception 'RLMException', reason: 'Object has been deleted or invalidated.'
クラッシュ箇所
final class Folder: Object {
@objc dynamic var uid: String = ""
@objc dynamic var name: String = ""
// 略
}
// MARK: - IdentifiableType
extension Folder: IdentifiableType {
// ここで落ちる
var identity: String {
return uid
}
}
解決
// MARK: - IdentifiableType
extension Folder: IdentifiableType {
var identity: String {
return isInvalidated ? "deleted-object-\(UUID().uuidString)" : uid
}
}
削除したやつの uid
を取得しちゃうとクラッシュする。
Reference
RxDataSource の並び替え
ViewController
private func setupTableView() {
dataSource.canMoveRowAtIndexPath = { [unowned self] _, indexPath in
return canMove(indexPath: IndexPath)
}
dataSource.canEditRowAtIndexPath = { [unowned self] _, indexPath in
return true
}
tableView.rx.itemMoved
.bind(to: viewModel.input.changeOrderTrigger)
.disposed(by: disposeBag)
}
地味にこれハマったー
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, targetIndexPathForMoveFromRowAt sourceIndexPath: IndexPath, toProposedIndexPath proposedDestinationIndexPath: IndexPath) -> IndexPath {
// 固定するやつがあったらここで移動できないようにする
if canMove(indexPath: IndexPath) {
return proposedDestinationIndexPath
} else {
return proposedDestinationIndexPath
}
}
}