【问题标题】:How to retrieve certain childByAutoId() key如何检索某些 childByAutoId() 密钥
【发布时间】:2018-01-06 08:16:33
【问题描述】:

我环顾了一段时间,没有运气。我需要在firebase中获取某个字典键的字符串值。

如果你看下面的图片,我需要那个键在上面,并且需要将它设置为一个字符串,我可以与其他视图控制器进行连接,所以当用户想要在共享者下发帖时,例如,我根据密钥进入正确的值,然后到共享者,我可以在其中添加值。谢谢,我也不需要所有的值,只要我观察到WithSingleEvent,我就需要获取每个页面或字典的键。

我的代码:

    let ref = FIRDatabase.database().reference()
    ref.child("Notes").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in
        if let pagers = snapshot.value as? [String : AnyObject] {
           let numb = snapshot.key //what I want
            for (_, val) in pagers {
                if let useri = val["postUsername"] as? String {
                    if useri == FIRAuth.auth()?.currentUser?.uid {

                        let bindfl = Page()
                        if let title = val["title"] as? String, let descript = val["description"] as? String,
                            let sharers = val["sharers"] as? [String], let poster = val["postUsername"] as? String, let setter = val["setter"] as? String, let creatorName = val["creatorName"] as? String {
                            bindfl.title = title
                            bindfl.descriptions = descript
                            bindfl.setter = setter
                            bindfl.sharers = sharers
                            bindfl.usernameOfBinder = poster
                            bindfl.creatorName = creatorName
                            bindfl.theBit = numb

                            self.pages.append(bindfl)

【问题讨论】:

  • 请编辑您的问题。真的很难理解。你真正追求的是什么?
  • 知道了 UmarZaii
  • 设置为字符串是什么意思?
  • 我只需要key的字符串值
  • 为该字典随机生成的单个密钥

标签: ios swift dictionary firebase firebase-realtime-database


【解决方案1】:
ref.child("Notes"). observeSingleEvent(of: .childAdded, with: {snapshot in
   print("\(snapshot.key)")
})

将为您提供表中每个条目的 autoID 键

ref.child("Notes").queryOrdered(byChild: "creatorName").queryEqual(toValue: "posterName").observeSingleEvent(of: .childAdded, with: {snapshot in
     var postID = snapshot.key

  //update post different post using retrieved ID
     let infoToAdd = ["newPostStuff" : true]
     FIREBASE_REF!.child("Posts/\(postID)").updateChildValues(infoToAdd)
})

将为您提供给定创建者每篇文章的自动 ID,然后使用检索到的键更新不同表上的值

【讨论】:

  • 在我使用了observersingleeventtype之后,有没有办法获得某个帖子的密钥
  • 我不确定你的意思。 print语句在observeSingleEvent函数之后执行
  • ref.child("Notes").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in if let pagers = snapshot.value as? [String : AnyObject] { let numb = snapshot.key //我想要的,我只需要snapshot.value的key
  • 您只想检索该密钥而不检索其他任何内容?如果是这样,我不确定是否有办法做到这一点。我很确定 Firebase 只返回带有键和值的字典。
  • 那么我应该如何在单独的视图控制器中的字典下添加值?
【解决方案2】:

当你将数据添加到数据库时,你可以这样做

let key = ref.("Notes").childByAutoId().key
let notes = ["userName": userName,
            "description": description,
            "title": title,
            "author": author,
            "keyID": key]
let childUpdates = ["/Notes/\(key)": notes]
ref.updateChildValues(childUpdates)

之后就可以了,像这样拿到钥匙

bindfl.title = title
bindfl.descriptions = descriptions
bindfl.userName = userName
bindfl.author= author
bindfl.keyID= keyID

希望它成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多