2016-08-02 1 views
1

En utilisant Firebase J'essaie d'obtenir la valeur "Product" qui appartient à la "marque". Par exemple si je clique sur la cellule où est "Marque" - "CATCH" je veux montrer le nouveau tableView avec tous les produits "CATCH". Comment puis-je atteindre cet objectif? Ceci est la structure Firebase:Obtenir une propriété de valeur en utilisant Firebase dans Swift

enter image description here

Ici, je reçois tous les noms des « marques » comme ceci:

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() 
      } 
     } 
    }) 
} 

Et comme ça, je suis en train d'obtenir les valeurs « Produits » en utilisant le 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() 
      } 
     } 
    }) 
} 

Voilà comment je perçois le clic cellulaire:

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

} 

J'ai 2 tableViews aussi et cellule personnalisée pour montrer les « Produits »

Le droit de détection de cellules? Comment y parvenir? Je ne vois rien sur internet par Googling mais peut-être connaissez-vous des liens.

Répondre

3

Je pense que pour obtenir toutes les valeurs et les clés dans un tableau, vous devez utiliser [[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

Que voulez-vous dire par « en même temps »? À mon avis, je suis d'abord le chargement des marques et ensuite des produits: D –

+0

ce qui signifie seulement avec un observateur et un tableau .. vous pouvez obtenir les deux –

+0

Vous pouvez ... en obtenant de la valeur à indexpath ... –