我今天从2.3迁移到Swift 3.0并修复了所有编译器错误消息,但是我遇到了一个TableView
的问题。在我调用reloadData()
之后,我在所有数据源方法之后放了一个断点,它进入numberOfSections
但在它离开numberOfRowsInSection
后崩溃了。 cellForRowAt
永远不会被击中。它在AppDelegate
崩溃了,所以我不确定那是什么。
我在运行Swift 2.3时之前没有遇到此问题,除非自动转换为3.0对此特定TableView
执行了某些操作。我的其他TableView
功能正常。
答案 0 :(得分:1)
使用以下代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//if self.podcasts.count is nil then 0 will be returned.
if let count = self.podcasts.count{
return count
}
return 0
}
如果您正在异步地将某些内容加载到播客中并同时重新加载tableview,那么播客可能会为nil并导致崩溃。
答案 1 :(得分:0)
当您的数组为空或具有nil值时,会发生此错误。尝试通过检查数组列表中包含的计数来加载行。
请按照以下代码避免此错误: -
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//Check array count here and return number of rows as same as array count otherwise return 0 rows
if self.podcasts.count > 0 {
return self.podcasts.count
}
else {
return 0
}
请始终按照此步骤避免此类崩溃。快乐编码!!
答案 2 :(得分:0)
尝试此操作,因为只有对象获得nil
才会自动管理计数
一些如何
return self.podcasts != nil ? self.podcasts!.count : 0