我正在构建一个具有多个场景和一个表格视图的应用程序,每个场景中都包含自定义单元格。我使主屏幕表格视图正常工作,然后从自定义单元格锁定到新场景。当它出现时,我的第二个视图控制器崩溃了。
这是我的视图控制器代码
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:]
我确保我的标识符匹配,并且没有任何无关或未连接的插座,这些是我可以在网上找到的唯一解决方案。
答案 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
。tableView.dequeueReusableCell
代替qTableView.dequeueReusableCell
。否则,请与我们共享崩溃日志。