我在我的Swift iOS应用程序中使用Firebase。我发现Firebase上的检索数据教程有点令人困惑,我不确定为什么当我尝试访问数据库中的现有值时会得到nil值。
这是我到目前为止所做的:
usersRef.queryOrderedByChild("fbid").queryEqualToValue(userId).observeSingleEventOfType(.Value, withBlock:{ snapshot in
print("SNAPSHOT: ",snapshot.value)
以下是打印快照的结果。
SNAPSHOT: {
1 = {
fbid = 1;
firstName = Michelle;
friendlist = {
9 = "Kevin C";
};
lastName = C;
profilepicurl = "https:;
uid = "facebook:1";
};
}
但是,以下行导致:
致命错误:在解包可选值时意外发现nil
firstName = snapshot.value.objectForKey("firstName") as! String
我想检索用户的所有值(firstName,profilepicurl,friendlist等)并将它们存储在变量中。这似乎很简单,但也许我错过了一些东西。任何帮助,将不胜感激。
答案 0 :(得分:6)
您的FDataSnapshot
不包含儿童firstName
。它只包含一个孩子1
。
这是因为您正在执行查询然后要求输入值。由于查询可以包含许多结果,因此它会返回结果列表。即使只有一个结果,它仍然是1的列表。
解决方案是循环孩子:
usersRef.queryOrderedByChild("fbid")
.queryEqualToValue(userId)
.observeSingleEventOfType(.Value, withBlock:{ snapshot in
for child in snapshot.children {
print("Loading group \(child.key!)")
}
})