私のcollectionViewのデータを保持するデータオブジェクトを更新しようとしています(単にデータモデルをフィルタリングするだけです)。そして、フィルタされたデータでcollectionViewを再ロードしたいとします。リロードが発生したときに、取得しているコレクションビューを再ロードする際に問題が発生し、範囲外のindexPathが発生します。 collectionViewが、元のデータオブジェクトを再ロードしようとしているのではなく、元のデータオブジェクトを再ロードしようとしていることをデバッグしているようです。何が私が間違ってやっている:データを更新してCollectionViewを再ロードする
func handleFilterAction(sender: FilterButton){
guard let type = sender.buttonFilterType else {return}
switch type {
case .FilterAll:
return
case .FilterDay:
return
case .FillterWeek:
return
case .FilterMonth:
collectionView?.performBatchUpdates({
let objects = FilterDataManager.filterDataWith(currentLocalData: &self.eventObjects, filterOption: .ThisMonth)
self.eventObjects.removeAll()
self.eventObjects = objects
}, completion: { (completion) in
self.navigationItem.title = "This Month"
self.collectionView?.reloadData()
})
}
self.handleShowFilterView()
}
eventObjectsがcollectionViewは、データのために読むべきものです:あなたがcollectionView
への変更をアニメーション化するとき
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return eventObjects[section].sectionObjects.count
}
私はperformBatchUpdates()呼び出しを削除しましたので、モデルで更新が実行された後でもreloadData()を呼び出すだけですが、デバッグ時には同じエラーが発生します。データで更新され、最初のセクションは正しく表示されますが、まだ2番目のセクションがあると思われます。 – bb2110
であり、更新されたオブジェクトモデルはフィルタリングしたものだけを有する。 – bb2110
フィルタリングが1つのセクションのデータを残すことを期待していましたか? – vacawama