2016-06-24 9 views
0

Я работаю над простой программой - я создаю объекты продуктов, а затем подсчитываю их калории.Как получить данные из Firebase в TableViewCell

Я хочу, чтобы получить весь мой продукт в TableViewController

Я создал метод, что позволяет мне сохранять данные правильно в Firebase, но я застрял при получении их в камеру. Я не получил ни одной ошибки, но у меня нет никаких результатов, а

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! 

    } 

Это мой DataService файл:

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) 

    } 

Я не могу получить то, что я делаю неправильно. Все продукты представлены в виде словаря.

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

какова фактическая проблема? –

ответ

0

Вы intilized в

var products = [Products]() 

Но не добавления каких-либо элементов из firebase обратного вызова

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

добавьте 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) 
} 
Смежные вопросы