2016-06-24 16 views
0

Ich arbeite an einem einfachen Programm - ich erstelle Objekte von Produkten und dann zähle ich ihre Kalorien.So rufen Sie Daten von Firebase zu TableViewCell

Ich möchte alle meine Tableviewcontroller ein Produkt bekommen

ich eine Methode erstellt haben, so dass ich die Daten ordnungsgemäß in Firebase zu retten, aber ich stecken geblieben, während sie zu Zelle abruft. Ich habe keine Fehler, aber ich habe keine Ergebnisse auch

import UIKit 
import Firebase 

class MainTableViewController: UITableViewController { 

    var products = [Products]() 


    override func viewDidLoad() { 
     super.viewDidLoad() 

      DataService.dataService.PRODUCT_BASE.observeEventType(.Value, withBlock: { snapshot in 

       print(snapshot.value) 

       self.products = [] 

       if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 

        for snap in snapshots { 

         if let postDictionary = snap.value as? Dictionary<String, AnyObject> { 

          let key = snap.key 

          let product = Products(key: key, dictionary: postDictionary) 


         } 
        } 
       } 

       self.tableView.reloadData() 
     }) 


    } 

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

    // MARK: - Table view data source 

    override func numberOfSectionsInTableView(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 products.count 
    } 


    override func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


     let cell = tableView.dequeueReusableCellWithIdentifier("ProductCell") as! UITableViewCell? 
     let ProductItem = products[indexPath.row] 

     cell?.textLabel?.text = ProductItem.productName 
     cell?.detailTextLabel?.text = String(ProductItem.productCalories) 

     return cell! 

    } 

Das ist mein Dataservice-Datei:

import Foundation 
import Firebase 

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

class DataService { 

    static let dataService = DataService() 

    private var _REF_BASE = URL_BASE 
    private var _USER_BASE = URL_BASE.child("users") 
    private var _PRODUCЕ_BASE = URL_BASE.child("products") 

    var REF_BASE: FIRDatabaseReference { 
     return _REF_BASE 
    } 

    var USER_BASE: FIRDatabaseReference { 
     return _USER_BASE 
    } 

    var PRODUCT_BASE: FIRDatabaseReference { 
     return _PRODUCЕ_BASE 
    } 


    var CURRENT_USER_REF: FIRDatabaseReference { 

     let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String 

     let currentUser = URL_BASE.child("users").child(userID) 

     return currentUser 

    } 


    func CreateNewProduct(product: Dictionary<String, AnyObject>) { 

     let ProductNewRef = DataService.dataService.PRODUCT_BASE.childByAutoId() 

     ProductNewRef.setValue(product) 

    } 

kann ich nicht bekommen, was ich falsch mache. Alle Produkte werden als Wörterbuch dargestellt.

import Foundation 
import Firebase 

class Products { 

    private var _productName: String! 

    private var _productCalories: Int! 


    var productName: String { 

     return _productName 

    } 

    var productCalories: Int { 

     return _productCalories 
    } 

    init(key: String, dictionary: Dictionary<String, AnyObject>) { 


     if let calories = dictionary["calories"] as? Int { 

      self._productCalories = calories 
     } 

     if let name = dictionary["name"] as? String { 

      self._productName = name 
     } 


    } 


} 
+0

was ist Ihre aktuelle Ausgabe hinzufügen? –

Antwort

0

Sie intilized die

var products = [Products]() 

aber keine Objekte aus Feuerbasis Rückruf

if let postDictionary = snap.value as? Dictionary<String, AnyObject> { 
     let key = snap.key 
     let product = Products(key: key, dictionary: postDictionary) 
} 

fügen Sie bitte self.products.append(product)

if let postDictionary = snap.value as? Dictionary<String, AnyObject> { 
     let key = snap.key 
     let product = Products(key: key, dictionary: postDictionary) 
     self.products.append(product) 
} 
Verwandte Themen