使用自定义UITableViewCell时,dequeueReusableCell(withIdentifier :)中的SIGABRT错误

时间:2019-02-20 22:12:50

标签: ios swift uitableview sigabrt

我正在构建一个具有多个场景和一个表格视图的应用程序,每个场景中都包含自定义单元格。我使主屏幕表格视图正常工作,然后从自定义单元格锁定到新场景。当它出现时,我的第二个视图控制器崩溃了。

这是我的视图控制器代码

import UIKit

class QuestionViewController: UIViewController {

    @IBOutlet weak var questionLabel: UILabel!
    @IBOutlet weak var submitButton: UIButton!
    @IBOutlet weak var qTableView: UITableView!


    var answers : [QuestionOption] = []


    override func viewDidLoad() {
        super.viewDidLoad()
        answers = [QuestionOption(text: "test"), QuestionOption(text: "test"), QuestionOption(text: "test"), QuestionOption(text: "test")]
        qTableView.delegate = self
        qTableView.dataSource = self
        submitButton.setTitle("Submit", for: .normal)
        questionLabel.text = "test question"
    }


}

extension QuestionViewController: UITableViewDataSource, UITableViewDelegate{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return answers.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let a = answers[indexPath.row]
        let cell = qTableView.dequeueReusableCell(withIdentifier: "QuestionOptionCell") as! QuestionOptionCell

        cell.setOption(option: a)

        return cell
    }

}

这是我的牢房代码

import UIKit

class QuestionOptionCell: UITableViewCell {

    @IBOutlet weak var cellTitle: UILabel!

    func setOption(option: QuestionOption){
        cellTitle.text = option.text
    }

}

这是我的QuestionOption类的代码

import Foundation
import UIKit

class QuestionOption{
    var text: String

    init(text: String){
        self.text = text
    }
}

崩溃日志

2019-02-20 14:33:28.394695-0800 iQuiz[8935:822409] *** NSForwarding: warning: object 0x7fd608407c40 of class 'iQuiz.QuestionOption' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[iQuiz.QuestionOption initWithCoder:]
2019-02-20 14:33:28.395281-0800 iQuiz[8935:822409] Unrecognized selector -[iQuiz.QuestionOption initWithCoder:]

这是我的故事板,如果有帮助的话 enter image description here

我确保我的标识符匹配,并且没有任何无关或未连接的插座,这些是我可以在网上找到的唯一解决方案。

2 个答案:

答案 0 :(得分:1)

崩溃日志指出QuestionOption必须是NSObject的子类,并采用NSCoding,在这种情况下,这是过分的。实际上,一个结构就足够了。

您可以通过删除QuestionOptionCell

中的方法来避免这种情况

func setOption(option: QuestionOption){
    cellTitle.text = option.text
}

并通过替换直接在cellForRowAt中设置值

cell.setOption(option: a)

使用

cell.cellTitle.text = a.text

答案 1 :(得分:0)

要检查的事情:

  • 验证“ QuestionOptionCell”确实是该单元的重用标识符。
  • 验证单元格的所选类型为QuestionOptionCell
  • 在cellForRowAt中,使用tableView.dequeueReusableCell代替qTableView.dequeueReusableCell

否则,请与我们共享崩溃日志。