我使用TableViewController创建Swift Firebase应用程序,其中tableview的每个部分都是一个房间,每一行都是每个房间的家具。加入价值变化时Firebase数据未更新
现在的问题:第一次加载一切工作正常,当任何房间正在改变/从后端删除表视图更新就好了。但是,当我的任何家具价值更新时,我有一个问题需要重新加载数据。我不知道如何改变我的代码来获得这个工作。我开始想我可能会使用不正确的数据结构?我该如何解决这个问题?
的火力地堡数据库的结构是这样的(I除去从该结构的某些键/值只是为了简化所以真正的结构具有更多的值):
rooms:
{
"room 1": {
"name": "Bedroom",
"somedata": 1
},
"room 2": {
"name": "Living room",
"somedata": 2
}
}
furniture:
{
"room 1": {
"furniture 2": {
"name": "Chair"
},
"furniture 3": {
"name": "Sofa"
}
},
"room 2": {
"furniture 1": {
"name": "Table"
}
}
}
我使用加载数据中的代码该TableViewController是:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DataManager.shared.getRooms(completion: { (rooms) in
self.rooms = rooms
self.tableView.reloadData()
})
}
的DataManager:
func getRooms(completion:@escaping ([Room])->Void) {
FIRDatabase.database().reference(withPath: "rooms").observe(.value, with: { snapshot in
var rooms: [Room] = []
var counter: UInt = 0
for roomItem in snapshot.children {
let room = Room(snapshot: roomItem as! FIRDataSnapshot)
FIRDatabase.database().reference(withPath: "furniture/\(room.key)").observe(.value, with: { snap in
for furnitureItem in snap.children {
let furniture = Furniture(snapshot: furnitureItem as! FIRDataSnapshot)
room.furnitureList.append(furniture)
}
counter = counter + 1
if (counter == snapshot.childrenCount) {
completion(rooms)
}
})
rooms.append(room)
}
})
}
谢谢帮助!
要在这里刺一下它,也许尝试在调度异步中包装完成回调? – TNguyen
我认为这不应该需要?请看下面的评论 – Martin
嗯,很难指出问题只能看到那么多。你可能会尝试双重检查,看看你的回调是否在更换家具后被调用? – TNguyen