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

时间:2014-07-03 16:46:06

标签: uitableview core-data swift

我在将一些值保存到我的coredata数据库后尝试填充我的tableview。我要求它显示我的代码中指示的一些值,但无论我做什么,我都会收到上述错误。 有什么建议?我已尝试过其他一些有这个问题的帖子,但似乎没什么用。

我无法想象我在哪里发出一个零输出Swift并不期望。

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 个答案:

答案 0 :(得分:2)

问题

您可能忘记在之前为小区标识符注册一个类。请参阅dequeueReusableCellWithIdentifier:的文档:

  

<强>讨论

     
    

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

  

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

解决方案

代码

要解决此问题,您可以像registerClass:forCellReuseIdentifier:这样呼叫viewDidLoad(请参阅docs)......

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

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

Interface Builder