我知道这个特定的问题之前曾在SO中被提出并回答,但是交叉检查了这些答案,仍然无法解决这个问题。可能是一个愚蠢的错误,但无法指出它。
交叉检查: Cell Identifierid 通过“接口”构建器
添加的数据源和委托代码:
var sensorFields = [Sensor]()
override func viewDidLoad() {
super.viewDidLoad()
readParseDataFromCSV(file: "csvFile")
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(self.sensorFields.count)// has count 120
return self.sensorFields.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SensorTableCell") as! SensorTableViewCell
cell.lblSensorName.text = sensorFields[indexPath.row].labelName
cell.lblSensorValue.text = sensorFields[indexPath.row].labelValue
print(sensorFields[indexPath.row].labelName) // doesn't seem to enter to this code block
print(sensorFields[indexPath.row].labelValue)
return cell
}
func readParseDataFromCSV(file:String){
let filepath = Bundle.main.path(forResource: file, ofType: "csv")!
do {
let csv = try CSV(contentsOfURL: filepath)
let rows = csv.rows
for row in rows{
let sensorlblName = row["data column 1"]
let sensorlblValue = row["data column 2"]
let sensor = Sensor(labelName: sensorlblName!, labelValue: sensorlblValue!)
sensorFields.append(sensor)
}
} catch {
print(error.localizedDescription)
}
}
class SensorTableViewCell: UITableViewCell {
@IBOutlet weak var lblSensorName: UILabel!
@IBOutlet weak var lblSensorValue: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
是否有任何错过,使用应用程序中的其他表视图已完全与此完全不同。 使用Xcode 8.1和Swift 3.0
编辑:
添加了reloadData()
似乎是这样的 func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - > UITableViewCell {}也没有解雇。
请帮忙。 提前谢谢。
答案 0 :(得分:0)
检查这个
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
var cell = tableView.dequeueReusableCellWithIdentifier("SensorTableCell") as UITableViewCell!
if !cell {
cell = UITableViewCell(style:.Default, reuseIdentifier: "SensorTableCell")
}
}
答案 1 :(得分:0)
只需将数据附加到sensorFields
数组,即可对tableView
中显示的单元格产生影响。
您需要在reloadData
上调用tableView
,以便它知道数据确实发生了变化,并使用新数据重新填充了单元格。
for row in rows {
let sensorlblName = row["data column 1"]
let sensorlblValue = row["data column 2"]
let sensor = Sensor(labelName: sensorlblName!, labelValue: sensorlblValue!)
sensorFields.append(sensor)
}
tableView.reloadData()
我也希望
// newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
// Swift 2
func dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath) -> UITableViewCell
// Swift 3
func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell
到
// Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.
// Swift 2
func dequeueReusableCellWithIdentifier(identifier: String) -> UITableViewCell?
// Swift 3
func dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
因为dequeueReusableCellWithIdentifier(identifier: String)
无法保证在尚未分配UITableViewCell
的单元格时返回identifier
。 (" [...]获取已分配的单元格,而不是分配新的单元格。" )
并确保您的IBOutlets
已连接! (lblSensorName
和lblSensorValue
)