Récupération de données Firebase spécifiques stockées dans une reference childByAutoId () (Swift)

Ce problème peut être difficile à expliquer.

Voici le JSON généré par Firebase:

{ "users" : { "2W1Sse5kiZarFQ5k8UKjP87D8Rk2" : { "PlainNote" : { "-KIZYVAGZQczTSI1L4Qi" : { "note" : "Finally works", "title" : "Whats up" }, "-KIZY_M3FMW0m8mgx4Am" : { "note" : "Aye", "title" : "Db" }, "-KIZpAEsa7-wSCOJfHvv" : { "note" : "This wont work for some reason", "title" : "Helloo" } }, "email" : "[email protected]" }, "XTjy66z8xEWtEiLx6E0mOo1JEaz2" : { "email" : "[email protected]" }, "rfzV1saUf3RtPu7YcqJ0VyAOgmd2" : { "PlainNote" : { "-KIZpfbfHcePU3E8HpeU" : { "note" : "Now i only see my own data", "title" : "Hello" } }, "email" : "[email protected]" } } } 

Voici comment je génère chaque note simple dans swift:

 let title = plainNoteTitleTextField.text! let note = bodyOfNoteTextView.text! let usersId = FIRAuth.auth()?.currentUser?.uid if title != "" || note != "" { let data = [ "title": title, "note": note ] self.usersRef.child(usersId!).child("PlainNote").childByAutoId().setValue(data) 

Après cela, je remplis la tableview en time réel avec la database firebase realtime:

 override func viewDidAppear(animated: Bool) { var localNotes = [Ssortingng]() var localBody = [Ssortingng]() let usersId = FIRAuth.auth()?.currentUser?.uid usersRef.child(usersId!).child("PlainNote").observeEventType(.ChildAdded, withBlock: { snapshot in let title = snapshot.value?.objectForKey("title") as! Ssortingng var x = snapshot.value?.objectForKey("note") as! Ssortingng if x.characters.count > 20 { x = x[0...20] + "..." } else { x = x + "..." } localNotes.insert(title, atIndex: 0) localBody.insert(x, atIndex: 0) self.notes = localNotes self.noteBody = localBody self.tableView.reloadData() }) } 

Mon problème: J'essaie d'accéder aux references de PlainNote de sorte que quand une cellule de tableview est tapée, je peux tirer le titre et le corps de note spécifique de Firebase. Je ne sais pas comment je ferais cela sans regarder ma database à chaque fois, car Firebase crée une reference unique chaque fois qu'une nouvelle note est créée.

(PS: Si vous pensez que vous comprenez, mais besoin de plus de détails, n'hésitez pas à requestr!) Merci.

Je ne sais pas si vous avez encore la réponse, mais ici c'est juste au cas où (j'ai eu le même problème). La façon dont je le comprends est que vous voulez get les keys uniques qui sont générées à chaque fois afin que vous puissiez accéder aux données stockées en dessous d'une seule. Vous pouvez générer un tableau de strings, puis l'utiliser pour extraire la valeur d'une key sur un seul index qui peut ensuite être réinjecté dans votre code de récupération de données. C'est fait comme ça:

 usersRef.child(usersId!).child("PlainNote").observeEventType(.ChildAdded, withBlock: { snapshot in var idKeys = [Ssortingng]() //this will hold your keys for snap in snapshot.children.allObjects { let id = snap as! FIRDataSnapshot idKeys.append(Ssortingng(id.key)) }} 

Maintenant vous avez vos keys, vous pouvez en sélectionner une en utilisant var selectedKey = idKeys [x].

J'espère que cela t'aides