2016-08-02 14 views
1

Mit Firebase Ich versuche, den "Produkt" Wert, der der "Marke" gehört. Zum Beispiel, wenn ich auf Zelle klicke, wo "Marke" - "FANGEN" ist, möchte ich neues tableView mit allen "CATCH" -Produkten zeigen. Wie kann ich das erreichen? Dies ist die Firebase Struktur:Get Wert Eigenschaft mit Firebase in Swift

enter image description here

Hier bin ich immer alle „Marken“ Namen wie folgt aus:

func parseSnusBrands(){ 
    let ref = FIRDatabase.database().reference().child("Snuses").child("Brands") 

    ref.queryOrderedByKey().observeEventType(.Value, withBlock: { (snapshot) in 
     if snapshot.exists() { 
      if let all = (snapshot.value?.allKeys)! as? [String]{ 
       self.snusBrandsArray = all 
       self.snusBrandsTableView.reloadData() 
      } 
     } 
    }) 
} 

Und wie dieses Ich versuche, die „Produkte“ Werte erhalten die Verwendung von allKeys:

func parseSnusProducts() { 
    let ref = FIRDatabase.database().reference().child("Snuses").child("Brands").child("Products") 

    ref.queryOrderedByKey().observeEventType(.Value, withBlock: { (snapshot) in 
     if snapshot.exists() { 
      if let all = (snapshot.value?.allValues)! as? [String]{ 
       self.snusBrandsArray = all 
       self.snusBrandsTableView.reloadData() 
      } 
     } 
    }) 
} 

Dies ist, wie ich die Zelle klicken erkennen:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){ 
    parseSnusProducts() 

} 

Ich habe 2 Tableviews auch und benutzerdefinierte Zelle die „Produkte“

Ist die Zelldetektion rechts zu zeigen? Wie erreiche ich das? Ich sehe im Internet nichts von Googeln, aber vielleicht kennen Sie einige Links.

Antwort

3

Ich denke, alle Werte und Schlüssel in einem Array zu erhalten, müssen Sie [[String:AnyObject]]

var snusBrandsArray = [[String:AnyObject]]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let ref = FIRDatabase.database().reference().child("Snuses").child("Brands") 

    ref.observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
     if snapshot.exists() { 
      if let all = (snapshot.value?.allKeys)! as? [String]{ 
       for a in all{ 
        if let products = snapshot.value![a] as? [[String:String]]{ 
         self.snusBrandsArray.append(["key":a,"value":products]) 
        } 
       } 
       self.yourtableview.reloadData() 
      } 
     } 
    }) 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    //cell declaration 
    print(snusBrandsArray[indexPath.row]["key"]) 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    print("products at \(indexPath.row) --> \(snusBrandsArray[indexPath.row]["value"])") 
} 
+0

Was tun Sie mit „gleichzeitig“ bedeutet benutzen? Meiner Meinung nach lade ich zuerst Marken und dann Produkte: D –

+0

das bedeutet nur mit einem Beobachter und einem Array .. Sie können beide bekommen –

+0

Sie können ... indem Sie Wert bei indexpath ... –