【发布时间】:2018-05-11 21:33:27
【问题描述】:
我有一个由视图模型驱动的集合视图。当用户注销时,我想清除视图模型和集合视图。但是,当我在清除视图模型时尝试调用 collectionView?.reload() 时程序崩溃:request for number of items in section 6 when there are only 0 sections in the collection view。
class ViewModel {
private var childVMs: [ChildViewModel]()
var numberOfSections { return childVMs.count }
func numberOfItems(inSection section: Int) {
return childVMs[section].numberOfItems
}
func clear() {
childVMs.removeAll()
}
...
}
class ViewController: UICollectionViewController {
let vm = ViewModel()
func logout() {
vm.clear()
collectionView?.reloadData()
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return vm.numberOfSections
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return vm.numberOfItems(inSection: section)
}
...
}
我注意到,当程序崩溃时,numberOfSections(in) 按预期返回 0,而 collectionView(_, numberOfItemsInSection) 甚至没有被调用。有没有想过哪里可能出错了?
【问题讨论】:
-
这只是一个
UICollectionViewController,已添加 -
主线程上是否调用了
logout()? -
请回答 Mike Taverne 的问题。
-
是的,说
UIButton.addtarget(target: self, #selector(logout))
标签: swift mvvm uicollectionview