排除自定义UITableView单元格[Swift]

时间:2014-12-30 17:27:12

标签: ios iphone uitableview swift

我在Storyboard中创建了一个自定义的UITableView单元格,如下所示:

enter image description here

我将它连接到我的UITableViewCell类,如下所示:

导入UIKit

class StatusCell: UITableViewCell {

@IBOutlet weak var InstrumentImage: UIImageView!

@IBOutlet weak var InstrumentType: UILabel!

@IBOutlet weak var InstrumentValue: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}
}

最后我试图从我的UIViewController初始化UITableView:

import UIKit

class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var TableView: UITableView!

let Items = ["Altitude","Distance","Groundspeed"]

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.Items.count
}

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

    var cell: StatusCell! = tableView.dequeueReusableCellWithIdentifier("Cell") as StatusCell!

    cell.InstrumentType?.text = Items[indexPath.row]
    cell.InstrumentValue?.text = "150 Km"
    cell.InstrumentImage?.image = UIImage(named: Items[indexPath.row])
    return cell
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

但是,当我尝试运行该程序时,出现EXC_BAD_INSTRUCTION错误:

enter image description here

我做错了什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

调试器输出显示cellnil,表示无法实例化。此外,您正在强制展开可选项(使用!),这会导致应用程序在nil值上崩溃。

尝试更改cellForRowAtIndexPath方法(请注意dequeueReusableCellWithIdentifier方法):

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as StatusCell

    cell.InstrumentType.text = Items[indexPath.row]
    cell.InstrumentValue.text = "150 Km"
    cell.InstrumentImage.image = UIImage(named: Items[indexPath.row])

    return cell
}

假设您的自定义tableViewCell类已正确设置且出口已绑定,则无需检查选项。

let cell = ...行放置断点并逐步执行代码。检查cell是否已初始化且不是nil

并且请: 不要对属性和变量(您的出口,Items数组...)使用大写名称,因为大写名称是班级,结构,......