Swift - 何时在TableViewController中实际加载数据

时间:2016-11-23 14:01:55

标签: swift uitableview firebase firebase-realtime-database

我非常喜欢Swift初学者 - 我正在使用Firebase数据填充表格视图。

在表格页脚中,我想在表格列下显示一些计算总计。但是,在调用footerCell.configure(priceLines, isPortrait: isPortrait)时,priceLines字典仍为空。

如何解决这个问题?

提前致谢,比利时安德烈哈特曼

import UIKit
import FirebaseDatabase

class ListTableViewController: UITableViewController {
    var priceLines = [NSDictionary]()
    var isPortrait = false

    override func viewDidLoad() {
        super.viewDidLoad()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ListTableViewController.rotated), name: UIDeviceOrientationDidChangeNotification, object: nil)
        loadDataFromFirebase()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return priceLines.count
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("profileCell", forIndexPath: indexPath) as! PriceTableViewCell
        cell.configure(priceLines, row: indexPath.row, isPortrait: isPortrait, source: "intraday")
        return cell
    }
    override func tableView(tableView: UITableView,viewForHeaderInSection section: Int) -> UIView? {
        let headerCell = tableView.dequeueReusableCellWithIdentifier("HeaderCell") as! CustomHeaderCell
        headerCell.configure(isPortrait)
        return headerCell
    }
    override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let footerCell = tableView.dequeueReusableCellWithIdentifier("FooterCell") as! CustomFooterCell
        footerCell.configure(priceLines, isPortrait: isPortrait)
        return footerCell
    }
    override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 30.0
    }
    override func tableView (tableView:UITableView, heightForHeaderInSection section:Int) -> CGFloat
    {
        return 50.0;
    }

    // MARK:- Load data from Firebase
    func loadDataFromFirebase() {
        UIApplication.sharedApplication().networkActivityIndicatorVisible = true
        refInter.observeEventType(.Value, withBlock: { snapshot in
            var tempItems = [NSDictionary]()
            for item in snapshot.children {
                let child = item as! FIRDataSnapshot
                let dict = child.value as! NSDictionary
                tempItems.append(dict)
            }
            self.priceLines = tempItems
            self.tableView.reloadData()
            UIApplication.sharedApplication().networkActivityIndicatorVisible = false
        })
    }
    func rotated()
    {
        let newDisplay = (UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
        if(newDisplay != isPortrait){
            self.tableView.reloadData()
        }
        isPortrait = newDisplay
    }
}

1 个答案:

答案 0 :(得分:0)

文档clearly says

  

当表格视图即将在第一次加载时出现时,   table-view controller重新加载表视图的数据。

因此,它会在TileCache tileCache = AndroidUtil.createTileCache(activity, "mapcache", mapView.getModel().displayModel.getTileSize(), this.getScreenRatio(), mapView.getModel().frameBufferModel.getOverdrawFactor()); viewDidLoad之间的某个位置自动重新加载表格。此时viewWillAppear为空,只有在方法priceLines中的闭包被触发时才会填充数据。我不确定它是什么时候发生的,但是当你隐式调用loadDataFromFirebase时,你应该已经reloadData非空(当然如果闭包中的结果有一些数据)