2017-03-07 131 views
4

我想檢索Cake的所有孩子價值蛋糕價格標籤。
我想檢索,但我不能安排正確的代碼,也是我入門級的ios。檢索表格視圖單元格中的標籤的所有孩子價值

火力地堡結構

enter image description here

的ViewController

enter image description here

TestTableViewCell

import UIKit 
class TestTableViewCell: UITableViewCell { 

@IBOutlet weak var cakeImage: UIImageView! 
@IBOutlet weak var cakeEngLabs: UILabel! 
@IBOutlet weak var cakeUrLabs: UILabel! 
@IBOutlet weak var cakeRateLabs: UILabel! 

} 

* TestTableViewController **

import UIKit 
import Firebase 

class TestTableViewController: UITableViewController { 

@IBOutlet var cakeTableView: UITableView! 

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


struct Cake { 
    let cakeEngNames: String 
    let cakeUrNames: String 
    let cakeImages: UIImage 
    var cakeRates: String 
} 


var cakes = [Cake(cakeEngNames: "almond Cake", cakeUrNames: "badam cake",  cakeImages: UIImage(named:"Maru")!, cakeRates: ""), 

     Cake(cakeEngNames: "Jelly Cake", cakeUrNames: "jeli ka cake", cakeImages: UIImage(named:"spices")!, cakeRates: ""), 

     Cake(cakeEngNames: "Jelly Cake", cakeUrNames: "jeli ka cake", cakeImages: UIImage(named:"spices")!, cakeRates: ""), 

     Cake(cakeEngNames: "Jelly Cake", cakeUrNames: "jeli ka cake", cakeImages: UIImage(named:"spices")!, cakeRates: "")] 




override func viewDidLoad() { 
super.viewDidLoad() 

let AlmondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") 
AlmondSnap.observe(.value, with: { (snapshot) in 
    let almondRate = snapshot.value as! String 
     self.cakes[].cakeRates = almondRate 

     print("\(almondRate)") 
     self.tableView.reloadData() 
}) 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
return self.cakes.count 
} 

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

cell.cakeImage.image = self.cakes[indexPath.row].cakeImages 
cell.cakeEngLabs.text = self.cakes[indexPath.row].cakeEngNames 
cell.cakeUrLabs.text = self.cakes[indexPath.row].cakeUrNames 
cell.cakeRateLabs.text = self.cakes[indexPath.row].cakeRates 
return cell 
} 
} 
+0

我不太清楚你在問什麼。當你運行現在的代碼時會發生什麼?你想要發生什麼? –

+0

我想在Testtabnleviewcontroller中檢索'Cake'的所有孩子值到ckae數組,因此它可以出現在viewcopntroller的cakreratelabel中 –

+0

現在,你的蛋糕是在'var cakes'數組中。你是說,不是用四個硬編碼的蛋糕填充這個數組,而是想從數據庫中檢索它? –

回答

1

因此,根據評論,如你所說,你只需要使用cakename和它的速率來填寫表格。其他則是靜態的(如果不是,請參閱@dstepan建議的結構和答案)。所以,這裏是如何填充tableview中的數據。

var cakes = [Cake]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let almondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") 
     almondSnap.observe(.value, with: { (snapshot) in 
      if snapshot.hasChildren(){ 
       for snap in snapshot.children { 
        // snap.key produces name of cake 
        // snap.value produces rate of cake 

        if let node = snap as? FIRDataSnapshot, let rate = node.value as? Int { 
         self.cakes.append(Cake(cakeEngNames: node.key, 
              cakeUrNames: "badam cake", 
              cakeImages: UIImage(named:"Maru")!, 
              cakeRates: String(rate))) 
        } 
       } 
       self.cakeTableView.reloadData() 
      } 
     }) 
    } 
0

如果你存儲在NSMutableArray中的所有值使用此

cell.cakeRateLbl.text = 「Almon Cake Rate :\(self.cakesArray[0].objectForKey(「Hyderabad」).objectAtIndex(0).objectForKey(「Bakery」).ObjectAtIndex(0).objectForKey(「Cake」).objectAtIndex(0).valueForKey(「Almon_Cake」) as! Int)\nAzna Mental Cake Rate :\(self.cakesArray[0].objectForKey(「Hyderabad」).objectAtIndex(0).objectForKey(「Bakery」).ObjectAtIndex(0).objectForKey(「Cake」).objectAtIndex(0).valueForKey(「Azna_Mental_Cake」) as! Int)\nBlack Forest Cake Rate :\(self.cakesArray[0].objectForKey(「Hyderabad」).objectAtIndex(0).objectForKey(「Bakery」).ObjectAtIndex(0).objectForKey(「Cake」).objectAtIndex(0).valueForKey(「Black_Forest_Cake」) as! Int)」 

或者你可以試試這個

cell.cakeRateLbl.text = 「Almon Cake Rate :\(self.cakes[indexpath.row].Almond_Cake)\nAzna Mental Cake Rate :\(self.cakes[indexpath.row].Azna_Mental_Cake)\nBlack Forest Cake Rate :\(self.cakes[indexpath.row].Black_Forest_Cake)」 
+0

這是一個答案?如果是這樣,你可以解釋它,並格式化,所以它是可讀的嗎? – Jay

+0

爲了在單一標籤中獲得所有價格細節,我們首先需要將字符串中的所有值快速轉換爲AnyObject,例如我們需要簡單地獲得Almon Cake的價格let almonCakePirce =「\(self.cakesArray [0] .objectForKey(「海得拉巴」)。objectAtIndex(0).objectForKey(「Bakery」)。ObjectAtIndex(0).objectForKey(「Cake」)。objectAtIndex(0).valueForKey(「Azna_Mental_Cake」)as! Int)「'現在整數轉換爲字符串,如果我們需要添加另一個值到該字符串意味着添加字符串之間的」\ n「 –

+0

@GaneshManickam有很多錯誤,請幫助我改進這些錯誤和警告分離聲明 –

0

由於目前構建,你可以a CCESS您Cake節點如下圖所示:

var cakes: [Cake] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let AlmondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") 

    AlmondSnap.observe(.value, with: { (snapshot) in 

     for item in snapshot.children { 

      if let cakeFromDatabase = item as? FIRDataSnapshot { 

       let cake = Cake() 

       cake.cakeRates = cakeFromDatabase.value // for "Almond_Cake" this will be 800 

       cakes.append(cake) 

      } 

     } 

     self.tableView.reloadData() 
    }) 
} 

但是,你很可能從製作一對夫婦的設計改變你目前的做法的基礎上,我所看到的受益。

你的數據庫結構,大概應該是

dgrproject-ac0e7 
-- Hyderabad 
    -- Bakery 
     -- Cakes 
      -- id1 
       -- name: Almond Cake 
       -- rate: 800 

等。

然後,在你的代碼,你可以做以下

var cakes: [Cake] = [] { 
    didSet { 
     self.tableView.reloadData() 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let AlmondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") 

    AlmondSnap.observe(.value, with: { (snapshot) in 

     let allCakes = [] 

     for item in snapshot.children { 

      if let cakeFromDatabase = item as? FIRDataSnapshot { 

       let cake = Cake() 

       cake.cakeEngNames = cakeFromDatabase["name"] as? String 
       cake.cakeRates = cakeFromDatabase["rate"] as? Int 

       allCakes.append(cake) 

      } 

     } 

     cakes = allCakes 
    }) 
} 

添加didSet你的蛋糕陣列,只要你設置cakes現在會自動刷新的tableView。這會清理代碼在Firebase調用的完成處理程序中。我們還創建了一個allCakes數組,以便我們不會將一個新的Cake對象附加到cakes,並導致在數據集增長時可能重新加載表視圖數百次。

希望這會有所幫助!

相關問題