У меня простой просмотр таблицы.,Когда я хочу удалить ячейку из табличного представления, я получаю эту ошибку.
Просмотр кода контроллера :
class FoodCategoryDetailTableViewController: UITableViewController {
var foodCategoryDetailViewModel: FoodCategoryDetailTableViewViewModelType?
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
guard let foodCategoryDetailViewModel = foodCategoryDetailViewModel else { return }
tableView.delegate = nil
tableView.dataSource = nil
foodCategoryDetailViewModel.foodsInSelectedCategory
.bind(to: tableView.rx.items(cellIdentifier: FoodCategoryDetailTableViewCell.cellIdentifier, cellType: FoodCategoryDetailTableViewCell.self))
{ row, food, cell in
cell.foodCategoryDetailCellViewModel = foodCategoryDetailViewModel.cellViewModel(forRow: row)
}.disposed(by: disposeBag)
tableView.rx.itemDeleted.subscribe({ [unowned self] indexPath in
self.foodCategoryDetailViewModel?.removeFoodFromApplication(atRow: (indexPath.element?.row)!)
self.tableView.reloadData()
}).disposed(by: disposeBag)
}
Просмотр кода модели :
class FoodCategoryDetailTableViewViewModel: FoodCategoryDetailTableViewViewModelType {
var foodsInSelectedCategory: BehaviorRelay<[Food]>
private var foodCategoryId: Int16
func cellViewModel(forRow row: Int) -> FoodTableViewCellViewModelType? {
if let food = getFood(atRow: row) {
return FoodTableViewCellViewModel(foodModel: food)
}
return nil
}
func removeFoodFromApplication(atRow row: Int) {
if let food = getFood(atRow: row) {
var foods = foodsInSelectedCategory.value
foods.remove(at: row)
self.foodsInSelectedCategory = BehaviorRelay(value: foods)
CoreDataHelper.sharedInstance.removeFoodFromApplication(foodName: food.name!)
}
}
private func getFood(atRow row: Int) -> Food? {
let food = foodsInSelectedCategory.value[row]
return food
}
init(foodCategoryId: Int16) {
self.foodCategoryId = foodCategoryId
self.foodsInSelectedCategory = BehaviorRelay(value: CoreDataHelper.sharedInstance.fetchFoodsFromSelectedCategory(foodCategoryId: self.foodCategoryId))
}
}
Я использую базовые данные.Я получаю ошибку в функции getFood()
.Это ошибка существует, потому что row
в контроллере представления имеет старое количество элементов в табличном представлении.Он не обновляется с новым количеством продуктов (продуктов) после удаления ячейки.