Необходимо удалить объект из массива данных прежде , Вы звоните deleteRowsAtIndexPaths:withRowAnimation:
. Так, Ваш код должен быть похожим на это:
// Editing of rows is enabled
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//when delete is tapped
[currentCart removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
можно также упростить код немного при помощи ярлыка создания массива @[]
:
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
Быстрая Версия-> Удаляет объект из Вашего массива данных перед вызовом
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
print("Deleted")
currentCart.remove(at: indexPath.row) //Remove element from your array
self.tableView.deleteRows(at: [indexPath], with: .automatic)
}
}
В моем случае проблема была то, что numberOfRowsInSection
возвращал подобное количество строк после вызова tableView.deleteRows(...)
.
, Так как это было необходимым поведением в моем случае, я закончил тем, что звонил tableView.reloadData()
вместо tableView.deleteRows(...)
в случаях, где numberOfRowsInSection
останется тем же после удаления строки.