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

SIGABRT error in dequeueReusableCell(withIdentifier:), when using custom UITableViewCell

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

这是我的视图控制器代码

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
    }

}

这是我的问题选项代码 class

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:]

如果有帮助的话,这是我的故事板

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

要检查的事项:

  • 验证 "QuestionOptionCell" 确实是小区的重用标识符。
  • 确认为单元格选择的类型是 QuestionOptionCell
  • 在 cellForRowAt 中,使用 tableView.dequeueReusableCell 而不是 qTableView.dequeueReusableCell

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

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

删除QuestionOptionCell

中的方法即可避免

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

并通过替换

直接设置cellForRowAt中的值
cell.setOption(option: a)

cell.cellTitle.text = a.text