当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?

Posted

技术标签:

【中文标题】当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?【英文标题】:Why am I getting EXC_BAD_INSTRUCTION error when I am trying to load my tableview in swift?当我尝试快速加载我的表格视图时,为什么会出现 EXC_BAD_INSTRUCTION 错误? 【发布时间】:2014-07-03 16:46:05 【问题描述】:

在将一些值保存到我的 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

【问题讨论】:

【参考方案1】:

问题

您之前可能忘记为单元标识符注册一个类。查看dequeueReusableCellWithIdentifier:的文档:

讨论

在将任何单元格出列之前,调用此方法或registerNib:forCellReuseIdentifier: 方法来告诉表格视图如何创建新单元格。如果指定类型的单元格当前不在重用队列中,表格视图将使用提供的信息自动创建新的单元格对象。

然后该方法返回 nil 并且 Swift 无法隐式解包可选。

解决方案

在代码中

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

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

在界面生成器中

...或者,如果您使用 Storyboard,则在选择 UITableViewCell 原型时直接在属性检查器的 Interface Builder 中进行设置:

【讨论】:

以上是关于当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试显示模态视图时,为啥会出现 CoreAnimation 异常?

当我更改视图时,为啥我的按钮首选项/参数会重置?

为啥我的第二个视图在转换后没有加载?

为啥当我在目标 c 中重新加载表视图时选择的值会被取消选择

当我尝试使用 MVVM WPF 中的命令修改对象时,为啥在视图模型中出现空错误?

滚动表格视图时关闭 modalViewController 时的 EXC_BAD_ACCESS