使用下面的代码,我想在每个表格单元中打印名称和价格。构建过程没有任何问题,但是当我运行该应用程序时,它在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!
}
}
答案 0 :(得分:2)
使用indexPath.row
代替UITableView
在let 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循环?它将导致表视图的所有单元格看起来都一样。