【问题标题】:Swift Data Model returning nil after unwrapping when there clearly is valueSwift 数据模型在明显存在价值时展开后返回 nil
【发布时间】: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时也会出现该错误。
  • 好的,谢谢你的建议,我检查了单元格,它都包含值
  • 如果此行发生崩溃,则自定义单元格中的插座未连接(标签Emailnil)。

标签: ios swift xcode firebase


【解决方案1】:

如果您将单元格设计为 Storyboard 中的原型,请删除此行:

ReservationTableView.register(RegistrationCell.self, forCellReuseIdentifier: "Cell")

如果您将其设计为 xib 文件,则需要将该行替换为接近此的内容:

ReservationTableView.register(UINib(nibName: "RegistrationCell", bundle: nil), forCellReuseIdentifier: "Cell")

附带说明...当您确信出现该类型的错误时,该值应该存在,请检查该行的其余部分。

例如,如果你这样做:

cell.Email.text = "this is a test"

您几乎肯定会收到相同的错误消息。此时,您知道它不是您的数据对象。

【讨论】:

  • 我确实尝试过这个,但它在构建后的表格视图中没有显示任何内容
  • 你的单元格是用 xib 文件还是故事板原型设计的?
  • 我的单元格是在 Xib 文件中设计的
  • 所以您使用了.register(UINib(nibName:... 格式并且您不再收到错误但在单元格中看不到任何内容?
  • 没错,我可能遗漏了 nib 文件或排序中的某些内容...
猜你喜欢
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多