线程1:UITableViewCell中的Exc错误指令

时间:2018-12-13 13:52:56

标签: ios swift uitableview

使用下面的代码,我想在每个表格单元中打印名称和价格。构建过程没有任何问题,但是当我运行该应用程序时,它在Bad Instruction

中显示var item1 = arrData[i]["name"]错误

这是完整的代码:

class ViewController3: UIViewController, UITableViewDelegate, 
UITableViewDataSource {

let arrData: [[String:Any]] = [
    ["name": "spiderman", "price": 5000],
    ["name": "superman", "price": 15000],
    ["name": "batman", "price": 3000],
    ["name": "wonder woman", "price": 25000],
    ["name": "gundala", "price": 15000],
]

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

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

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let identifier = "Cell"

    var cell = tableView.dequeueReusableCell(withIdentifier: identifier)

    var i = 0

    while i <= arrData.count {
        var item1 = arrData[i]["name"]
        var item2 = arrData[i]["price"]
        cell?.textLabel?.text = "\(item1) \(item2)"
        i = i + 1
    }
    return cell!

}

}

4 个答案:

答案 0 :(得分:2)

使用indexPath.row代替UITableViewlet identifier = "Cell" override func viewDidLoad() { super.viewDidLoad() tableview.register(UITableViewCell.self, forCellReuseIdentifier: identifier) tableview.reloadData() } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) let item1 = arrData[indexPath.row]["name"] let item2 = arrData[indexPath.row]["price"] cell.textLabel?.text = "\(item1!) \(item2!)" return cell } 的每一行显示适当的数据。并使用如下所示的可重用单元格:

(a or b) is None

答案 1 :(得分:1)

修复此问题while i < arrData.count。索引超出范围。

答案 2 :(得分:0)

当您使用指令i <= arrData.count作为第5个索引时,您将崩溃。您应该改用或更好地用于指令中

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identifier = "Cell"

var cell = tableView.dequeueReusableCell(withIdentifier: identifier)

var i = 0

while i < arrData.count {
    var item1 = arrData[i]["name"]
    var item2 = arrData[i]["price"]
    cell?.textLabel?.text = "\(item1) \(item2)"
    i = i + 1
}
return cell!

}

答案 3 :(得分:0)

数组的下标从零开始。这意味着第一个元素不是arrData[1]而是arrData[0]。因此while i <= arrData.count将导致超出数组范围。

尝试while i < arrData.count

PS,tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)中的代码已连接,为什么要添加while循环?它将导致表视图的所有单元格看起来都一样。