【发布时间】:2020-03-17 19:19:51
【问题描述】:
我目前正在尝试解析数据“结构/模型”中的数据
数据模型代码:
import Foundation
struct DataModel {
//MARK: Organizes data structs
let userId: String
let Time: String
let Restaurant: String
let PartySize: String
let date: String
}
我将数据放入其中,然后尝试将这些数据重新放入表格视图的可重用单元格中
可重复使用单元代码:
class RegistrationCell: UITableViewCell {
//SetUp xib File
@IBOutlet weak var PSize: UILabel!
@IBOutlet weak var Time: UILabel!
@IBOutlet weak var Date: UILabel!
@IBOutlet weak var Email: UILabel!
@IBOutlet weak var Resto: UILabel!
}
当我尝试将数据模型中的数据放入单元格时,我得到“线程 1:致命错误:在隐式展开可选值时意外发现 nil”
完整代码:
// ReservationsViewController.swift
// MySeat
//
// Created by Adam Abu Ghaida on 3/16/20.
// Copyright © 2020 Adam Abu Ghaida. All rights reserved.
//
import UIKit
import FirebaseDatabase
class ReservationsViewController: UIViewController {
@IBOutlet weak var ReservationTableView: UITableView!
let DB = Database.database().reference().child("Reservations")
//var dataArray: [[String]] = []
var dataArray: [DataModel] = []
override func viewDidLoad() {
super.viewDidLoad()
ReservationTableView.dataSource = self
ReservationTableView.register(RegistrationCell.self, forCellReuseIdentifier: "Cell")
LoadData()
}
func LoadData(){
DB.observe(.childAdded) { (snapshot) in
let snapshotValue = snapshot.value as! Dictionary<String,String>
let PSize = snapshotValue["PartySize"]!
let Resto = snapshotValue["Restaurant"]!
let UID = snapshotValue["Uid"]!
let Time = snapshotValue["Time"]!
let Date = snapshotValue["date"]!
let DBData = DataModel(userId:UID, Time: Time, Restaurant: Resto, PartySize: Resto, date: Date)
//self.dataArray.append(InfoArray)
self.dataArray.append(DBData)
print(self.dataArray)
self.configTabelView()
self.ReservationTableView.reloadData()
}
}
func configTabelView() {
ReservationTableView.rowHeight = UITableView.automaticDimension
}
}
extension ReservationsViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let data = dataArray[indexPath.row]
let cell = ReservationTableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! RegistrationCell
print("\n\n\n\n\n\n\n\n\(data)\n\n\n\n\n\n\n\n")
cell.Email.text = data.userId
cell.PSize.text = data.PartySize
cell.Resto.text = data.Restaurant
cell.Date.text = data.date
cell.Time.text = data.Time
return cell
}
}
所有其他“cell.xxx.text”语句也会发生这些相同的错误
编辑:
设法解决了这个问题,只需将self.ReservationTableView.reloadData() 放在关闭之外。
另一个问题:单元格现在不显示...
【问题讨论】:
-
快速提示:所有其他“cell.xxx.text”语句都会发生同样的错误
-
请在您的问题中添加其他信息,而不是在 cmets 中。另请参阅How to Ask。
-
cell.Email等为nil时也会出现该错误。 -
好的,谢谢你的建议,我检查了单元格,它都包含值
-
如果此行发生崩溃,则自定义单元格中的插座未连接(标签
Email为nil)。