从firebase

时间:2017-06-07 15:25:19

标签: ios swift firebase firebase-realtime-database

我有一些信息被发送到firebase。在我的应用中,用户输入有关他们自己的信息,并将其存储在uids下。这是层次结构:

{
  "gJRhIOfmckTq9cRWNnwhg7tdxxv1" : {
    "City" : "New York, New York",
    "College" : "New York University of New York",
    "Major" : "Nursing",
    "uid" : "gJRhIOfmckTq9cRWNnwhg7tdxxv1"
  },
  "ix7JSoW5JZMSmDjwQRUUd8W7fi2" : {
    "City" : "Miami, Florida",
    "College" : "University of Miami",
    "Major" : "Neuroscience ",
    "uid" : "ix7JSoW5JZMSmDjwQRUUd8W7fi2"
  }
}

以下是上传数据的路径:

FIRDatabase.database().reference().child("info").child(self.loggedInUser!.uid)
  .observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in

问题是,当某个特定用户登录时,他们应该能够看到其他用户的信息,但当我尝试检索未登录用户的信息时,我遇到了问题因为uid。我只获取未登录用户信息页面中显示的登录用户信息。如何使.child(self.loggedInUser!.uid)使其不仅捕获登录用户的uid而且捕获所有uid。

1 个答案:

答案 0 :(得分:0)

根据您对我的评论的回复,您似乎需要在选择其个人资料时需要有关用户的所有信息。这就是非规范化将派上用场的地方。 This blog postthis YouTube video详细介绍了非规范化的内容和原因,因此我在这里不太了解。

使用非规范化,您可以包含一个子项,该子项列出所有用户都将用户名作为密钥,并将用户的uid列为值。然后,当用户通过用户名选择该用户时,例如从表格中的列表中选择该用户,您可以找到用户的uid,然后收听用户个人资料的值。数据库结构将是这样的:

{
    users: {
        "thisperson": "gJRhIOfmckTq9cRWNnwhg7tdxxv1",
        "anotherperson": "ix7JSoW5JZMSmDjwQRUUd8W7fi2",
        ...
    },
    info: {
        "gJRhIOfmckTq9cRWNnwhg7tdxxv1" : {
            "City" : "New York, New York",
            "College" : "New York University of New York",
            "Major" : "Nursing",
            "uid" : "gJRhIOfmckTq9cRWNnwhg7tdxxv1"
        },
        "ix7JSoW5JZMSmDjwQRUUd8W7fi2" : {
            "City" : "Miami, Florida",
            "College" : "University of Miami",
            "Major" : "Neuroscience ",
            "uid" : "ix7JSoW5JZMSmDjwQRUUd8W7fi2"
        },
        ...
    }
}

然后,您不是监听已登录用户的值,而是监听所选用户的值,然后使用该值进行侦听:

 FIRDatabase.database().reference().child("info").child(otheruid)
   .observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in

其中otheruidFIRDatabase.database().reference().child("users").child(username)

的值