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的主要内容,如果未能解决你的问题,请参考以下文章

swift中选择后UITableViewCell布局错误

重新加载 tableView 部分而不重新加载标题部分 - Swift

Swift - 第二次加载后 Tableview 无法正确重新加载

多次重新加载 TableView Swift

如何在 TableView 中重新加载数据

Swift - 多个 TableView 复选标记 - 保存和加载选择