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.

1 Answer 1

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!)") 
            }
})
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for the quick answer, I'm going to try it and get back to you.
Accepted your answer as the solution. Thanks again!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.