Когда я отклоняю свой обычай mVC при вставке элементов в представление коллекции, приложение вылетает с ошибкой индекса вне диапазона. Неважно, насколько я удаляю все источники данных collectionView, все равно происходит сбой. Вот что я делаю, чтобы вставить элементы:
DispatchQueue.global(qos: .background).async { // [weak self] doesn't do much
for customs in Global.titles.prefix(8) {
autoreleasepool {
let data = self.getData(name: customs)
Global.customs.append(data)
DispatchQueue.main.async { [weak self] in
self?.insertItems()
}
}
}
}
func insertItems() { // this function helps me insert items after getting data and it works fine
let currentNumbers = collectionView.numberOfItems(inSection: 0)
let updatedNumber = Global.customs.count
let insertedNumber = updatedNumber - currentNumbers
if insertedNumber > 0 {
let array = Array(0...insertedNumber-1)
var indexPaths = [IndexPath]()
for item in array {
let indexPath = IndexPath(item: currentNumbers + item, section: 0)
indexPaths.append(indexPath)
}
collectionView.insertItems(at: indexPaths)
}
}
Я пытался удалить все элементы в таможенном массиве и перезагрузить представление сбора перед тем, как закрыть, но все еще получаю ошибку:
Global.customs.removeAll()
collectionView.reloadData()
dismiss(animated: true, completion: nil)
Я подозреваю, что с Я загружаю данные, используя фоновый поток, представление коллекции вставляет элементы, даже когда представление выгружено (ноль), но использование DispatchQueue.main.async { [weak self] in self?.insertItems() }
тоже не помогает.