Swift - tableview 加载错误 - 可怕的 SIGBART
Posted
技术标签:
【中文标题】Swift - tableview 加载错误 - 可怕的 SIGBART【英文标题】:Swift - tableview load error - the dreaded SIGBART 【发布时间】:2016-10-15 12:06:29 【问题描述】:从头开始一个 Xcode 项目。选定的单一视图选项。放在视图上方的表格视图中。选择了 1 个细胞原型。创建了一个单元格标识符“cell”。添加了满足 tableview 协议所需的 UITableViewDelegate 和函数。表视图链接到视图控制器。该代码没有运行前错误或警告。但是,我收到此错误:
2016-10-15 07:50:29.622 LawDataNHC[5219:196567] * 断言失败 在 -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UITableView.m:8035 2016-10-15 07:50:29.650 LawDataNHC[5219:196567] * 终止应用 由于未捕获的异常“NSInternalInconsistencyException”,原因: 'UITableView (; 层 = ; 内容偏移:0, 0; contentSize: 375, 44>) 未能获得 来自其数据源()的单元格 *** 首先抛出调用栈:
材质表查看代码:
class ViewController: UIViewController, UITableViewDelegate
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func numberOfSections(in tableView: UITableView) -> Int
return 1
private func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = "test"
return cell
【问题讨论】:
您是否将视图控制器设置为表格视图的数据源?此外,您的代码不会使用您的原型单元,因为您只是在实例化 UITableViewCell。您需要使用dequeueReusableCellWithIdentifier
来使用原型单元
我确实将视图控制器设置为表视图委托和数据源。下面 hagfish 提供的 dequeReusableCell(withIdentifier: "cell") 解决方案也不起作用。这让我像过去一样发疯(Swift 2)我使用确切的代码制作了其他表格。
【参考方案1】:
您忘记在您的ViewController
中命名协议UITableViewDataSource
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
你的 cellForRowAt
方法也不应该是私有的:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
最后尝试使用dequeueReusableCell
方法生成单元格,而不是使用UITableViewCell(style: .default, reuseIdentifier: "cell")
创建新单元格。
您的 ViewController
类应如下所示:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 1
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
//let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "test"
return cell
【讨论】:
天哪……我会继续我的日常工作。这是 UITableViewDataSource 的遗漏。谢谢巴尔德拉马先生。我头上还有头发。 :) @P.Festus 很高兴它对你有所帮助!【参考方案2】:您返回 nil tableView 单元格的代码尝试以下操作: 替换为它:
private func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell.textLabel?.text = "test"
return cell
【讨论】:
在这个方法中表格视图实例永远不能是nil
。以上是关于Swift - tableview 加载错误 - 可怕的 SIGBART的主要内容,如果未能解决你的问题,请参考以下文章
重新加载 tableView 部分而不重新加载标题部分 - Swift