Я пытаюсь вставить (а затем удалить) элементы из представления коллекции, которое находится внутри табличного представления.При вставке элементов в представление коллекции я получаю следующую ошибку:
*** 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.