使用自定义 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
我正在构建一个包含多个场景的应用程序和一个 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