检索存储在childByAutoId()参考(Swift)中的特定Firebase数据

这个问题可能很难解释。

这里是由firebase生成的JSON:

{ "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" : "jacobsiegel@gmail.com" }, "XTjy66z8xEWtEiLx6E0mOo1JEaz2" : { "email" : "123@gmail.com" }, "rfzV1saUf3RtPu7YcqJ0VyAOgmd2" : { "PlainNote" : { "-KIZpfbfHcePU3E8HpeU" : { "note" : "Now i only see my own data", "title" : "Hello" } }, "email" : "whatsup@gmail.com" } } } 

下面是我如何在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) 

在此之后,我使用firebase实时数据库实时填充tableview:

 override func viewDidAppear(animated: Bool) { var localNotes = [String]() var localBody = [String]() let usersId = FIRAuth.auth()?.currentUser?.uid usersRef.child(usersId!).child("PlainNote").observeEventType(.ChildAdded, withBlock: { snapshot in let title = snapshot.value?.objectForKey("title") as! String var x = snapshot.value?.objectForKey("note") as! String 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() }) } 

我的问题:我试图访问PlainNote引用,以便当一个tableview单元被轻敲时,我可以从firebase拉特定的笔记标题和正文。 我不知道我怎么做,而不是每次都看我的数据库,因为每当创build一个新的笔记,firebase创build一个独特的参考。

(PS:如果你认为你理解,但需要更多的细节,请不要犹豫,问!)谢谢。

不知道如果你有答案,但在这里,以防万一(我有同样的问题)。 我理解的方式是,您要获取每次生成的唯一键,以便可以访问存储在单个键下的数据。 您可以生成一个string数组,然后使用它来提取单个索引处的键值,然后将其反馈到您的数据检索代码中。 这样做是这样的:

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

现在你有你的密钥,你可以select一个使用var selectedKey = idKeys [x]。

希望这可以帮助