检索firebase子项并在UITableView中填充它们

时间:2017-03-16 11:16:19

标签: ios swift uitableview

  

尝试查询firebase子项并将其数据的快照数组检索到tableview中。不确定我是否正确实现了这一点,但我不是得到运行时错误。但是,我的tableview只是白色,没有显示任何对象。一些反馈会有所帮助。谢谢。

这是我的FB JSON树结构

  

Here is my FB JSON tree structure.

这是我的User类(var userList = User)

  

Here is my User class (var userList = [User]())

class CDetailTableViewController: UITableViewController {


    static var imageCache = NSCache<AnyObject, UIImage>()

    var userList = [User]()

    var ref = FIREBASE.FBDataReference().ref

    var refHandle: UInt!



    override func viewDidLoad() {
        super.viewDidLoad()

        ref = FIREBASE.FBLink().FBref
        configureCell()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows


        return userList.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CDetailTableViewCell



        cell.priceLabel?.text = userList[indexPath.row].priceLabel
        cell.titleLabel?.text = userList[indexPath.row].titleLabel
        cell.itemPhoto?.image = userList[indexPath.row].objectImage

        return cell


    }


    func configureCell(){

        let ref = FIRDatabase.database().reference()

        let userID = FIRAuth.auth()?.currentUser?.uid

        refHandle = ref.child("Enterpriser Listings").child("Sell Old Stuff - Listings").child(userID!).observe(.childAdded, with: { (snapshot) in

            if let dictionary = snapshot.value as? [String : AnyObject]  {

                print("get dictionary")
                print(dictionary)

                let user = User()

                user.setValuesForKeys(dictionary)
                self.userList.append(user)

                // Get user value

                DispatchQueue.main.async {

                    print("reloaded")

                    self.tableView.reloadData()
                }


            }
        })

    }


    /*
    // Override to support conditional editing of the table view.
    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    */

    /*
    // Override to support editing the table view.
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            // Delete the row from the data source
            tableView.deleteRows(at: [indexPath], with: .fade)
        } else if editingStyle == .insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }    
    }
    */

    /*
    // Override to support rearranging the table view.
    override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {

    }
    */

    /*
    // Override to support conditional rearranging of the table view.
    override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the item to be re-orderable.
        return true
    }
    */

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

2 个答案:

答案 0 :(得分:1)

可能问题在于您的library(igraph) set.seed(1) m <- matrix(sample(c(.5, 2, 5), 100, replace=T, prob = c(.6,.3,.1)), nc=10, dimnames = rep(list(letters[1:10]), 2)) g <- graph_from_adjacency_matrix(m, weighted=T, diag=F, mode="undirected") coords <- layout.auto(g) par(mfrow = c(1,3)) plot(g, layout=coords, edge.width = E(g)$weight) s1 <- subgraph.edges(g, E(g)[E(g)$weight>2], del=F) plot(s1, layout=coords, edge.width = E(s1)$weight) s2 <- delete_vertices(s1, degree(s1, mode = "in")==0) plot(s2, layout=coords[V(g)$name%in%V(s2)$name,], edge.width = E(s2)$weight) 引用,请尝试这种方式。

Firebase

答案 1 :(得分:0)

简单的问题。你委托了你的tableview吗?

class YourController: < other >, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() { //for example this function
        super.viewDidLoad()

        self.tableView.delegate = self
        self.tableView.dataSource = self
}