Я удаляю элементы в UICollectionView с помощью следующего кода:
func DeleteItem(indexPath: NSIndexPath) {
// remove from the data source
myList.removeObjectAtIndex(indexPath.item)
// remove the item from the collection view
self.collectionView!.performBatchUpdates({
self.collectionView?.deleteItemsAtIndexPaths([indexPath])
}, completion: nil)
}
Это отлично работает, за исключением случаев, когда я хочу удалить последний элемент в списке, даже если список не пуст. Я получаю следующую ошибку утверждения:
'NSInternalInconsistencyException', reason: 'attempt to delete item 4 from section 0 which only contains 4 items before the update'
Я отладил его, и кажется, что код удаления проверяет количество элементов в источнике данных, вызывая:
collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int)
когда вы пытаетесь удалить последний элемент, поскольку вы удалили один из источника данных, количество элементов в источнике данных становится равным индексу, который вы пытаетесь удалить в коллекции пользовательского интерфейса. В этом примере утверждения я пытаюсь удалить последний элемент с индексом 4 из источника данных, в котором изначально было 5 элементов, когда я удаляю элемент из источника данных, количество элементов становится 4, что равно индексу элемента, который нужно удалить из пользовательского интерфейса, поэтому код удаления вызывает утверждение.
Я не знаю, как это обойти. Правильный способ - сначала удалить элемент из источника данных, а затем из коллекции. В противном случае вы получите другие утверждения. Итак, как правильно это сделать? Спасибо!