来自 firebase 的数据未填充在我的 table 视图中

Data from firebase not populating in my table view

所以我最近问了一个关于 firebase 的问题 - 但是我重构了我的代码很多,因为我希望我的所有 firebase 方法都在同一个地方完成。重构后我遇到了以下问题...

我的 firebase 数据库中的数据没有填充到我的 table 视图中。我不太确定为什么会这样,因为在我将方法从我的 table 视图(为了更清晰的代码)移动到一个单独的文件之前它工作正常。我所做的只是将填充数组的方法移动到一个单独的文件,return 一个数组,然后在调用该方法后重新加载 table 视图。以下是有问题的代码:

在我的 FireBaseMethods class

//-------------- POPULATE TABLE ARRAY -----------------//
    public func populateConsumableTableArray() -> [Consumable]{
        var tableArray = [Consumable]()

        //let the object populate itself.
        ref.child("Consumables").observe(.childAdded, with: { snapshot in
            let dataChange = snapshot.value as? [String:AnyObject]
            let aRequest = Consumable(aDict: dataChange!)
            tableArray.append(aRequest)
        })
        return tableArray
    }

在我的 ListOfConsumablesViewController table 视图中 class

class ListOfConsumablesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    private var methods:MethodsForController = MethodsForController()
    private var fireBaseMethods:FireBaseMethods = FireBaseMethods()

    private var consumableArray = [Consumable]()

    let picker = UIImagePickerController()

    @IBOutlet weak var consumableTable: UITableView!

    //-------------------- VIEW DID LOAD -----------------------//
    override func viewDidLoad() {
        super.viewDidLoad()

        //Trying to populate the table view here...
        consumableArray = fireBaseMethods.populateConsumableTableArray()
        consumableTable.reloadData()

        self.consumableTable.dataSource = self
        self.consumableTable.delegate = self
    }

...

    //---------------------- FUNCTIONS FOR TABLE VIEW CELLS & TABLE ----------------------//
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print(consumableArray.count)
        return consumableArray.count
    }

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

        cell.layer.borderWidth = 1
        cell.layer.borderColor = UIColor.lightGray.cgColor
        cell.backgroundColor = UIColor.white
        cell.adapterType.text = consumableArray[indexPath.row].getType()
        cell.count.text = String(consumableArray[indexPath.row].getCount())

        if Int(consumableArray[indexPath.row].getCount()) ?? 0 <= 0{
            cell.count.textColor = UIColor.red
        }else{
            cell.count.textColor = UIColor.black
        }

        cell.sku.text = consumableArray[indexPath.row].getSku()

        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 90
    }
}

如下所示,table 视图中没有填充任何内容...我假设这与位于单独文件中的方法有关,但我不确定为什么会这样?

完成处理程序的简单实现

//-------------- POPULATE TABLE ARRAY -----------------//
public func populateConsumableTableArray(completion: @escaping (Consumable) -> Void) {

    //let the object populate itself.
    ref.child("Consumables").observe(.childAdded, with: { snapshot in
        guard let dataChange = snapshot.value as? [String:AnyObject] else { return }
        let aRequest = Consumable(aDict: dataChange)
        completion(aRequest)
    })
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.consumableTable.dataSource = self
    self.consumableTable.delegate = self

    //Trying to populate the table view here...
    fireBaseMethods.populateConsumableTableArray { [unowned self] consumable in 
       self.tableArray.append(consumable)
       DispatchQueue.main.async {
           self.consumableTable.reloadData()
       }
    }
}