Swift - список данных из Firebase в табличном представлении - PullRequest
0 голосов
/ 19 марта 2020

Я хочу получить список данных из базы Firebase.

Это моя таблица активности из Firebase

import UIKit
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase
import FirebaseAnalytics
import FirebaseFirestore


class activitys{

var act_name: String?
var act_owner: String?

init(act_name: String?, act_owner: String?) {
   self.act_name = act_name
   self.act_owner = act_owner
   }
}


class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


@IBOutlet weak var actTableView: UITableView!

var activityList = [activitys]()

var ref : DatabaseReference!

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return activityList.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customcell", for: indexPath) as! HomeTableViewCell


        let test = activityList[indexPath.row]
        cell.act_name?.text = test.act_name
        cell.act_owner?.text = test.act_owner

        return cell

        }



override func viewDidLoad() {
    super.viewDidLoad()

    ref = Database.database().reference()

    actTableView.dataSource = self
    actTableView.delegate = self
    fetchActivityList()


}


func fetchActivityList(){

    ref = Database.database().reference()
    ref.child("Activity").observe(.childAdded, with: { (snapshot) in
                let results = snapshot.value as? [String : AnyObject]
                let name = results?["act_name"]
                let owner = results?["act_owner"]
                let myAct = activitys(act_name: name as! String?, act_owner: owner as! String?)
                self.activityList.append(myAct)
                DispatchQueue.main.async {
                    self.actTableView!.reloadData()
                }
        })
}


}

Этот проект выполнит sh при запуске.

сообщение об ошибке: Поток 1: неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения

и сообщение об ошибке, подобное этому.

I убедитесь, что все розетки подключены. Я могу дать вам исходный код, если вы знаете, как решить эту проблему. Спасибо.

Ответы [ 2 ]

1 голос
/ 19 марта 2020

1) Полагаю, вы только что объявили tableView, но не подключены к раскадровке.

2) Убедитесь, что класс - это UIViewController, а не UITableViewController, я думаю, что ваши соединения подключены неправильно.

3) Удалить эти розетки

Remove This Outlets

4) HomeViewController.swift

//
//  HomeViewController.swift
//  EnJoin
//
//  Created by 陳曉聰 on 6/1/2020.
//  Copyright © 2020 Chan Hiu Chung. All rights reserved.
//

import UIKit
//import Firebase
//import FirebaseAuth
//import FirebaseStorage
//import FirebaseDatabase
//import FirebaseAnalytics
//import FirebaseFirestore


class activitys{

    var act_name: String?
    var act_owner: String?

    init(act_name: String?, act_owner: String?) {
        self.act_name = act_name
        self.act_owner = act_owner
    }
}


class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


    @IBOutlet weak var actTableView: UITableView!



//    var activityList = [activitys]()
    let items = ["Item 1", "Item2", "Item3", "Item4"]

    //    var ref : DatabaseReference!

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! HomeTableViewCell

        cell.act_name.text = items[indexPath.row]

        return cell

    }



    override func viewDidLoad() {
        super.viewDidLoad()

        //        ref = Database.database().reference()


        actTableView.delegate = self
        actTableView.dataSource = self

        //        fetchActivityList()

    }



    //    func fetchActivityList(){
    //
    //        ref = Database.database().reference()
    //        ref.child("Activity").observe(.childAdded, with: { (snapshot) in
    //                    let results = snapshot.value as? [String : AnyObject]
    //                    if let name = results?["act_name"] as? String,let owner = results?["act_owner"] as? String{
    //                      let myAct = activitys(act_name: name, act_owner: owner)
    //                        self.activityList.append(myAct)
    //                    }
    //                    DispatchQueue.main.async {
    //                        self.actTableView!.reloadData()
    //                    }
    //            })
    //    }


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

Проблема в строке no.82

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

let myAct = activitys(act_name: name as! String?, act_owner: owner as! String?)

Проверьте, является ли значение name и owner доступно до того, как вы развернете его.

if let name = results?["act_name"] a? String,let owner = results?["act_owner"] 
{
  let myAct = activitys(act_name: name, act_owner: owner)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...