Вставка строк при падении пути индекса, но не перезагрузка данных - PullRequest
0 голосов
/ 05 июля 2018

У меня странная проблема.

У меня есть массив строк и контроллер таблиц. Когда я добавляю данные в массив строк и использую метод вставки строк для обновления представления таблицы, мое приложение вылетает.

Это мой массив:

var stringArray = ["A","D"]

и это мой метод вставки строк:

let additionItems = ["B","C"]
let indexPath = IndexPath(row: 0, section: 0)
stringArray.insert(contentsOf: additionItems, at: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: .automatic)
tableView.endUpdates()

Дело в том, если я использую:

tableView.reloadData()

Я не получаю никаких сбоев и мой tableView обновляется соответственно Может кто-нибудь объяснить, пожалуйста, проблема с моим кодом?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Я думаю, что IndexPath для каждого нового элемента необходим. Вы пробовали:

let paths = [IndexPath(row: 0, section: 0), IndexPath(row: 1, section: 0)]
tableView.insertRows(at: paths, with: .automatic)
0 голосов
/ 05 июля 2018

Переместите вызов на stringArray.insert..., чтобы быть после вызова на beginUpdates. Проблема с тем, что он был раньше, состоит в том, что beginUpdates считает, что модель данных уже обновлена ​​до настоящего времени, но таблице еще не сообщили об обновлении.

Другой вариант - удалить звонки на begin/endUpdates. Они не нужны в этом случае.

Помимо внесения одного из этих изменений, вы также должны понимать, что вы добавляете два значения в модель данных, но вы только сообщаете табличному представлению, что вставляете одну строку. Вам нужен индексный путь для обеих строк и вставьте оба, чтобы соответствовать двум объектам, добавленным в массив.

Поскольку вы хотите вставить две новые строки между двумя существующими строками, вам необходимо:

let additionItems = ["B","C"]
let indexPathB = IndexPath(row: 1, section: 0)
let indexPathC = IndexPath(row: 2, section: 0)
stringArray.insert(contentsOf: additionItems, at: 1)
tableView.insertRows(at: [indexPathB, indexPathC], with: .automatic)

Обратите внимание на изменение индекса при вставке элементов в stringArray и необходимость двух соответствующих путей индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...