Swift - tableview加载错误 - 可怕的SIGBART

时间:2016-10-15 12:06:30

标签: ios swift uitableview

从头开始创建Xcode项目。选择单视图选项。放在视图上的tableview中。选择1个细胞原型。创建了一个小区标识符“cell”。添加了UITableViewDelegate和满足tableview协议所需的功能。 tableview链接到视图控制器。代码没有预运行错误或警告。但是,我收到了这个错误:

  

2016-10-15 07:50:29.622 LawDataNHC [5219:196567] *断言失败   in - [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(; layer =;   contentOffset:{0,0}; contentSize:{375,44}>)未能获得   来自其dataSource()的单元格   ***首先抛出调用堆栈:

材料表视图代码:

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
    }

2 个答案:

答案 0 :(得分:1)

您已忘记在UITableViewDataSource

中为协议ViewController命名
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
  }
}

答案 1 :(得分:0)

您的代码返回nil tableView单元格尝试以下内容: 替换为它:

private func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

    cell.textLabel?.text = "test"

    return cell
    }