iOS 如果 firebase 查询没有回调 运行 (Swift Firebase)
iOS callback if firebase query doesn't run (Swift Firebase)
我有一个查询 运行 检查 .childAdded 在我数据库中的某个位置。
它在找到数据时运行良好,但是,如果该位置没有数据,它就无法触发查询,因此不允许使用snapshot.exists
因为它甚至没有 运行 查询。
这是我当前的代码
let favouriteRef = self.databaseRef.child("users").child(userID!).child("Favourites")
// Code doesn't run past this line when no data at location
favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let favouriteID = "\(snapshot.value!)"
let usersRef = self.databaseRef.child("users")
usersRef.observeSingleEvent(of: .value, with: { (users) in
for user in users.children {
let favCleaner = UserClass(snapshot: user as! DataSnapshot)
if favouriteID == favCleaner.uid {
tempFav.append(favCleaner)
}
}
self.hasFavourites = true
self.tableView.reloadData()
self.usersArray = tempFav
self.collectionView.reloadData()
})
})
如果查询没有运行(位置无数据),我想找到一种接收回调的方法
谢谢。
如果该位置绝对没有数据,那么显然此事件触发器不足以让您获取数据,因为此事件仅在添加内容时触发。
所以你有两个选择
- 添加另一个类型为
.observeSingleEvent(of: .value, with: { (snapshot) in
// Get the values and write the relevant actions
}
的触发器
- 或者您可以将此事件更新为键入
.observe(.value, with: {snapshot in // write the relevant code
}
这两种方法各有利弊。
第一种方法需要您编写更多代码,同时最大限度地减少从数据库到 UI 的触发器数量。在第二种方法中,UI 会有更多触发器,但编码起来相当容易。
据我所知,您首先尝试确定数据库的 favorite
节点中是否存在数据,然后将其与另一个 snapshot
节点进行比较。因此,如果删除或更新事件的数量相对较少,我的建议是采用方法二。
我有一个查询 运行 检查 .childAdded 在我数据库中的某个位置。
它在找到数据时运行良好,但是,如果该位置没有数据,它就无法触发查询,因此不允许使用snapshot.exists
因为它甚至没有 运行 查询。
这是我当前的代码
let favouriteRef = self.databaseRef.child("users").child(userID!).child("Favourites")
// Code doesn't run past this line when no data at location
favouriteRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let favouriteID = "\(snapshot.value!)"
let usersRef = self.databaseRef.child("users")
usersRef.observeSingleEvent(of: .value, with: { (users) in
for user in users.children {
let favCleaner = UserClass(snapshot: user as! DataSnapshot)
if favouriteID == favCleaner.uid {
tempFav.append(favCleaner)
}
}
self.hasFavourites = true
self.tableView.reloadData()
self.usersArray = tempFav
self.collectionView.reloadData()
})
})
如果查询没有运行(位置无数据),我想找到一种接收回调的方法
谢谢。
如果该位置绝对没有数据,那么显然此事件触发器不足以让您获取数据,因为此事件仅在添加内容时触发。 所以你有两个选择
- 添加另一个类型为
.observeSingleEvent(of: .value, with: { (snapshot) in // Get the values and write the relevant actions }
的触发器 - 或者您可以将此事件更新为键入
.observe(.value, with: {snapshot in // write the relevant code }
这两种方法各有利弊。 第一种方法需要您编写更多代码,同时最大限度地减少从数据库到 UI 的触发器数量。在第二种方法中,UI 会有更多触发器,但编码起来相当容易。
据我所知,您首先尝试确定数据库的 favorite
节点中是否存在数据,然后将其与另一个 snapshot
节点进行比较。因此,如果删除或更新事件的数量相对较少,我的建议是采用方法二。