1
我有一个在Swift中开发的应用程序,它使用Firebase作为后端。检索嵌套键Firebase数据库
MESSAGES
-KW83KXYFzNgo-ibxKQV
--dateSent: "2016-09-09 12:30:23+0000"
--smiley:"smiley1"
--userID:"0QggCGYr46fcz3ak8tcQjsyZ9sJ2"
Users
-- 0QggCGYr46fcz3ak8tcQjsyZ9sJ2
--name: "john"
--photo:"photoURL"
我想要检索用户的名称和消息显示他们,我试试这个代码:
self.ref = FIRDatabase.database().reference()
self.ref.child("messages").observe(.childAdded, with: { snapshot in
if let snapshotValue = snapshot.childSnapshot(forPath: Constants.Messages.senderId).value {
FIRDatabase.database().reference().child("Users")
.child(snapshotValue as! String).observe(.value, with: {userSnapshot in
if let userSnapshotValue = userSnapshot.value as? [String:Any] {
self.usernames.append(userSnapshotValue[Constants.UserFields.nickName] as! String)
}
})
结果是这样的:
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
0QggCGYr46fcz3ak8tcQjsyZ9sJ2
[]
VAMFsmkM7DObJ0x752eVT1WuICe2
[]
所以代码检索键,但没有执行嵌套查询。任何命题?
问题是嵌套查询异步,所以结果会如预期的那样不同,我尝试做出单独的查询,当用户查询时执行我创建tableview的单元格,但我仍然有问题,具体给出的结果,特别是当我快速上下滚动 –
@TawfikBouabid这是不正确的。 Firebase的异步特性可以使代码在闭包运行时执行*比闭包中的代码更慢。如果您看到答案,则打印语句仅出现在闭包内,因此变量必须包含数据,因此时间安排很好。您的问题处于更高层次,因为您在创建单元格时不应访问Firebase。您应该访问Firebase以填充*数组*,然后将其作为您的tableView的数据源。单元应该*只访问该数组,这使得它非常灵敏。 – Jay