Обновление представления коллекции (необходимость вызова executeBatchUpdates)? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь вставить (а затем удалить) элементы из представления коллекции, которое находится внутри табличного представления.При вставке элементов в представление коллекции я получаю следующую ошибку:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert item 0 into section 0, but there are only 0 items in section 0 after the update'

Я прочитал много других сообщений, в которых говорится, что проблема в том, что источник данных представления коллекции не обновляется, прежде чем пытаться вставить элементы впредставление коллекции, поэтому есть несоответствие между размером двух.Мой источник данных представления коллекции - это массив строк, которые я получаю из текстового поля, в которое пользователь может ввести текст.Когда пользователь нажимает клавишу возврата на клавиатуре, я хочу добавить все, что они ввели в представление коллекции.Итак, у меня есть следующий метод:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    searchedItemsArray.append(textField.text!)
    searchedItems.insertItems(at: [IndexPath(row: searchedItemsArray.count - 1, section: 0)])
    textField.resignFirstResponder()
    return true
}

, где искомыйItemsArray является источником данных, а искомые элементы - это представление коллекции.Как видите, я обновляю источник данных перед представлением коллекции.Я также проверил, что строка правильно добавлена ​​в представление коллекции.Когда пользователь вводит первый элемент, я распечатал размер массива и убедился, что он был равен 1, прежде чем вызывается метод collectionView.insert ().

У меня также есть этот метод для представления коллекции:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return searchedItemsArray.count
}

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

Другое возможное решение, которое я виделдля пользователя executeBatchUpdates (), но это кажется ненужным, поскольку я обновляю одну вещь в collectionView.

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