在tableViewController中接收Firebase autoId

时间:2016-09-17 10:53:04

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

我有一个firebase结构,如下所示: enter image description here

蓝色名称为feedPosts,绿色名称为userId,没有颜色的名称为autoId firebase为追加数据而创建,橙色名称为内容:"用户发布字符串在此处&#34 ;

我的问题是我不知道如何获取firebase autoId,以便我可以显示用户在tableViewController中发布的内容。我需要将数据附加到userId,以便用户可以发布多个帖子 - 我只是不知道如何在tableViewController中获取密钥。帮帮我?

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是更改您的结构以匹配您尝试获取的数据。这就是你现在拥有的东西

feedPosts
   -fbUserId0
     -autoIdForThisPost1
        content: "users post string is here"
   -fbUserId1
     -autoIdForThisPost1
        content: "users post string is here"

将其更改为此

feedPosts
   -autoIdForThisPost0
      post_by_uid: "-fbUserId0"
      content: "users post string is here"
   -autoIdForThisPost1
      post_by_uid: "-fbUserId1"
      content: "users post string is here"

然后您可以通过-fbUserId1查询所有帖子。这将返回每个将包含内容的帖子节点以及作为autoId的帖子的KEY。

这也是可扩展的,因为您还可以存储例如关于帖子的时间戳,或者甚至可以存储响应的帖子。

另一个优点是使整个结构更平坦(更好更好!在Firebase中非常重要)并且更具查询性。

答案 1 :(得分:0)

如果您的JSON是这样的: -

foodItems{
      uid1 :{
          autoID1 :{
                content : "This is a String"
         }
      }
    }

检索包含 content : "This is a String"

的autoID

Swift 2.3

   let parentRef = FIRDatabase.database().reference().child("foodItems/\(FIRAuth().auth()!.currentUser!.uid)").queryOrderedByChild("content").queryEqualToValue("This is a String")

     parentRef.observeSingleEventOfType(.Value, withBlock:{(snap) in 

      if let snapContainingContent = snap.value as? [String:AnyObject]{

         for each in snapContainingContent{
             print(each.0)//your autoID
             print(each.1)//your content String
             if let autoDict = each.1 as? NSDictionary{

                   print(autoDict["content"]!)
                   print(autoDict.allKeys(for: "This is a String")[0])


                }
            }

       }

 })

Swift 3

let parentRef = FIRDatabase.database().reference().child("Posts/foodItems/uid1").queryOrdered(byChild: "content").queryEqual(toValue: "This is a String")

    parentRef.observeSingleEvent(of: .value, with:{(snap) in

        if let snapContainingContent = snap.value as? [String:AnyObject]{

            for each in snapContainingContent{
                print(each.0)//your autoID
                print(each.1)//your content String
                if let autoDict = each.1 as? NSDictionary{

                   print(autoDict["content"]!)
                   print(autoDict.allKeys(for: "This is a String")[0])
                }

            }

        }

    })