#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
Я следую руководству по обучению кодированию с использованием Swift. В нем меня просят создать массив массивов, который используется для создания сгруппированной таблицы. например var emojis = [[emojiarray1],[emojiarray2],[emojiarray3]]
В более позднем упражнении мне предлагается включить код, чтобы салфетка удаляла строку из табличного представления. Вот что у меня есть внутри функции, которая помогает выполнить этот процесс:
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
emojis.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
Однако, когда я провожу пальцем, чтобы удалить строку, вместо удаления строки я получаю сбой приложения с сообщением: Поток 1: Signal SIGABRT
И в консоли я получаю
*** Assertion failure in -[UITableView _Bug_Detected_In_Client_Of_UITableView_Invalid_Number_Of_Sections:]
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (7) must be equal to the number of sections contained in the table view before the update (8), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'
Там написано «недопустимое количество разделов», но я удалил не раздел, а только строку в разделе. Я думаю, что, возможно, в emojis.remove(at: indexPath.row)
строке был удален раздел, но я действительно не знаю, правда ли это и как это исправить.
Ответ №1:
Если вы удаляете строку из таблицы, но удаляете раздел из массива, вам может понадобиться
emojis[indexPath.section].remove(at: indexPath.row)
Комментарии:
1. Да, это исправлено. Я знал о свойстве section, но не использовал его, потому что в руководстве, которое я использую, была предоставлена функция для использования, и код не использовал свойство section (вместо этого он использовал приведенный выше код). Итак, если кто-то еще выполняет руководство и застрял, это исправило это