当我尝试在swift中加载我的tableview时,为什么会出现EXC_BAD_INSTRUCTION错误?

vxbzzdmp  于 2023-06-21  发布在  Swift
关注(0)|答案(2)|浏览(88)

在将一些值保存到coredata数据库后,我正在尝试填充tableview。我要求它显示我的代码中指示的一些值,但无论我做什么,我都会得到上面的错误。有什么建议吗?我试过其他一些有这个问题的帖子,但似乎都不起作用。
我想不出我可能在哪里给出了Swift不期望的nil输出。

override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {

    let CellId: NSString = "Cell"

    var cell: UITableViewCell = tableView?.dequeueReusableCellWithIdentifier(CellId) as UITableViewCell

    if let ip = indexPath {
        var data: NSManagedObject = myCustomers[ip.row] as NSManagedObject
        var addno = data.valueForKeyPath("custaddno") as String
        var addname = data.valueForKeyPath("custaddfirstline") as String
        cell.textLabel.text = "\(addno) \(addname)"
        var jcost = data.valueForKeyPath("custjobcost") as Float
        var jfq = data.valueForKeyPath("custjobfq") as Float
        var jfqtype = data.valueForKeyPath("custjobfqtype") as String
        cell.detailTextLabel.text = "Charge: \(jcost) to be done every \(jfq) \(jfqtype)"
    }
    return cell
}
e4eetjau

e4eetjau1#

问题

您以前可能忘记为单元标识符注册一个类。参见dequeueReusableCellWithIdentifier:的文档:

讨论

在出队任何单元格之前,调用此方法或registerNib:forCellReuseIdentifier:方法来告诉表视图如何创建新单元格。如果指定类型的单元格当前不在重用队列中,则表视图将使用提供的信息自动创建新的单元格对象。
该方法返回nil then,Swift无法隐式解包可选值。

解决方案

代码中

要解决这个问题,您可以像这样在viewDidLoad中调用registerClass:forCellReuseIdentifier:(参见文档)...

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}

在界面生成器中

...或者,如果您使用的是情节串联图板,请在选中UITableViewCell原型时,在属性检查器的“界面生成器”中直接进行设置:

sxpgvts3

sxpgvts32#

这里有一个清单,以避免这种崩溃:
1.验证单元格是否已注册到表视图
1.验证您的XIB单元格是否标有正确的标识符
1.验证您的xib是否链接到权限IBOutlets
1.验证IBOutlets的类型是否正确(即UIView、UIImage、UIStackView等)

相关问题