1

I'm using Firebase for my Swift iOS application. I found the retrieving data tutorial on Firebase's guide a bit confusing and I am not sure why when I try to access existing values in my database results in nil values.

This is what I have so far:

usersRef.queryOrderedByChild("fbid").queryEqualToValue(userId).observeSingleEventOfType(.Value, withBlock:{ snapshot in
                        print("SNAPSHOT: ",snapshot.value)

Here is the result of printing snapshot.

SNAPSHOT:  {
    1 = {
        fbid = 1;
        firstName = Michelle;
        friendlist =         {
            9 = "Kevin C";
        };
        lastName = C;
        profilepicurl = "https:;
        uid = "facebook:1";
    };
}

However, the line below results in:
fatal error: unexpectedly found nil while unwrapping an Optional value

 firstName = snapshot.value.objectForKey("firstName") as! String

I would like to retrieve all the values for the user (firstName, profilepicurl, friendlist, etc) and store them in variables. It seems simple but perhaps I'm missing something. Any help would be appreciated.

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Mishy
  • 97
  • 1
  • 2
  • 10

1 Answers1

6

Your FDataSnapshot does not contain a child firstName. It only contains a child 1.

This is because you're performing a query and then asking for a value. Since a query can have many results, it returns a list of results. Even when there's only one result, it is still a list of 1.

The solution is to loop over the children:

usersRef.queryOrderedByChild("fbid")
        .queryEqualToValue(userId)
        .observeSingleEventOfType(.Value, withBlock:{ snapshot in
            for child in snapshot.children {
                print("Loading group \(child.key!)") 
            }
})
Dory Daniel
  • 798
  • 14
  • 21
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807