Ответ 1
Просто сделайте это так:
[self.collectionView performBatchUpdates:^{
[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
} completion:nil];
Я хотел бы перезагрузить UICollectionView с помощью некоторой анимации. В UITableView есть метод под названием reloadSections:withRowAnimation
.
Но в UICollectionView есть только reloadSections
.
Как настроить анимацию reloadSections? Я определенно видел это в приложениях в App Store.
Просто сделайте это так:
[self.collectionView performBatchUpdates:^{
[self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
} completion:nil];
Версия Swift 3:
collectionView.performBatchUpdates({
let indexSet = IndexSet(integer: 0)
self.collectionView.reloadSections(indexSet)
}, completion: nil)
Эта статья здесь стоит прочитать: http://victorlin.me/posts/2016/04/29/uicollectionview-invalid-number-of-items-crash-issue
TL;DR:
Итак, оказалось, что executeBatchUpdates вызывает collectionView (: numberOfItemsInSection:) прежде, чем вызвать данное закрытие, чтобы узнать номера позиций. Затем он вызывает закрытие и, в конце концов, снова вызывает collectionView (: numberOfItemsInSection:), чтобы проверить номер. И здесь возникает исключение утверждения.