Swift Data Model возвращает ноль после распаковки, когда явно есть значение - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я пытаюсь проанализировать данные в «структуре / модели данных»

Код для модели данных:

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: неустранимая ошибка: неожиданно обнаружил ноль при неявном развертывании необязательного значения»

Изображение ошибки: Error Image

Полный код:

//  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() за пределами замыкания.

Еще одна проблема: ячейки не отображаются ...

1 Ответ

0 голосов
/ 17 марта 2020

Если вы спроектировали свою ячейку как прототип в раскадровке, удалите эту строку:

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

Если вы спроектировали ее как файл xib, вам нужно заменить эту строку чем-то похожим на это:

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

В качестве примечания ... при получении такого типа ошибки, когда вы убеждены значение должно быть там, проверьте остаток строки.

Для Например, если вы сделаете это:

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

, вы почти наверняка получите то же сообщение об ошибке. В этот момент вы знаете, что не ваш объект данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...