【发布时间】:2016-09-21 05:06:18
【问题描述】:
我正在尝试检查用户名是否存在。当我调用queryOrderedBychild 时,快照值始终可用,但它会打印出我的整个数据库,而不仅仅是我请求queryOrderby 的数据。当我调用queryEqualToValue 时,它总是返回null。我已经尝试了很多方法来弄清楚。
这是我的代码:
DataService.instance.UsersRef.queryOrdered(byChild:"Nickname").queryEqual(toValue: "kai1004pro").observe(.value, with: { (snapshot) in
if (snapshot.value is NSNull) {
print("not found")
} else {
print("found")
print(snapshot.value)
}
})
这是我的 json 树:
Optional({
g50X0FvEsSO4L457v7NzS3dAABl1 = {
"User Profile" = {
Birthday = "Sep 20, 1992";
Gender = Female;
Nickname = kai1004pro;
UserUID = g50X0FvEsSO4L457v7NzS3dAABl1;
emailAddress = "poqksbs@gmail.con";
isFollow = 0;
isFriend = 0;
};
};
})
这是安全规则:
"rules": {
".read": true,
".write": "auth != null",
"Users": {
".read": true,
".write": "auth != null",
".indexOn": ["Nickname", "User Profile"]
}
}
}
【问题讨论】:
-
您的 UsersRef 是什么?我的猜测是,在这种情况下,它链接到用户 id (g50X0FvEsSO4L457v7NzS3dAABl1),而 Nickname 不是它的直接孩子,所以它永远不会找到它,因为它没有搜索正确的位置。当我经历这个时,我还记得在搜索子节点时遇到了 .value 的问题,我相信我使用了 .ChildAdded 和 .ChildChanged 。
标签: ios swift firebase firebase-realtime-database