如何处理 childAdded 与 observeSingleEvent 相同
How to handle childAdded the same as observeSingleEvent
我有一个 UITableView,它将使用此函数正确加载:
channelRef?.observeSingleEvent(of: .value, with: { (snapshot) in
self.updateTableViewWithPlayers(snapshot: snapshot)
})
func updateTableViewWithPlayers(snapshot: FIRDataSnapshot)
{
print(snapshot)
let storage = FIRStorage.storage()
let storageRef = storage.reference(forURL: "gs://omega-towers-f5beb.appspot.com")
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict{
print(each.value)
let UIDs = each.value["userID"] as? String
let pictureVersion = each.value["PictureVersion"] as? String
if let allUIDS = UIDs{
if let allPictureVersions = pictureVersion{
如果其中有 1 个用户,将其打印为输出:
Snap (-KeEan584BeCQ0eJ2dxs) {
"-KeEb2XMrCUFLfO90y0v" = {
PictureVersion = 6;
userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
username = pietje;
};
name = sdddd;
}
{
PictureVersion = 6;
userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
username = pietje;
}
这很好用。现在我想在新用户加入时更新表视图。我添加了这个功能:
channelRef?.observe(.childAdded, with: { (snapshot) -> Void in
self.updateTableViewWithPlayers(snapshot: snapshot)
})
打印出来:
Snap (-KeEbYVJIle8dhP1Oyxm) {
PictureVersion = 6;
userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
username = pietje;
}
6
pietje
N4GifT8HvfRrDEkC09ARC1DnYyI3
我不知道为什么这个输出不同。我想有 1 个函数可以处理这两个函数(observe 和 observeSingleEvent),但我不确定为什么 observe 函数不能正常工作。谁能帮帮我?
你所说的打印出来的内容看起来很奇怪,但想法如下:observeSingleEvent will 运行 only once as the name suggested.另一方面,observe 每次需要由 Firebase Cloud 调用该类型时都会调用。这意味着如果您对类型 .childAdded 使用 ** observeSingleEvent**,您的块将只被调用一个 child,通常 。 child为该快照中的每个 child 添加 运行 秒。并且每次添加新的 child 时都会继续调用。如果你想在每次添加新的 child 时更新你的 tableView,你应该使用 observe 和 .childAdded。
我不确定我是否回答了你的问题。如果没有,请告诉我。
我有一个 UITableView,它将使用此函数正确加载:
channelRef?.observeSingleEvent(of: .value, with: { (snapshot) in
self.updateTableViewWithPlayers(snapshot: snapshot)
})
func updateTableViewWithPlayers(snapshot: FIRDataSnapshot)
{
print(snapshot)
let storage = FIRStorage.storage()
let storageRef = storage.reference(forURL: "gs://omega-towers-f5beb.appspot.com")
if let snapDict = snapshot.value as? [String:AnyObject]{
for each in snapDict{
print(each.value)
let UIDs = each.value["userID"] as? String
let pictureVersion = each.value["PictureVersion"] as? String
if let allUIDS = UIDs{
if let allPictureVersions = pictureVersion{
如果其中有 1 个用户,将其打印为输出:
Snap (-KeEan584BeCQ0eJ2dxs) {
"-KeEb2XMrCUFLfO90y0v" = {
PictureVersion = 6;
userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
username = pietje;
};
name = sdddd;
}
{
PictureVersion = 6;
userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
username = pietje;
}
这很好用。现在我想在新用户加入时更新表视图。我添加了这个功能:
channelRef?.observe(.childAdded, with: { (snapshot) -> Void in
self.updateTableViewWithPlayers(snapshot: snapshot)
})
打印出来:
Snap (-KeEbYVJIle8dhP1Oyxm) {
PictureVersion = 6;
userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
username = pietje;
}
6
pietje
N4GifT8HvfRrDEkC09ARC1DnYyI3
我不知道为什么这个输出不同。我想有 1 个函数可以处理这两个函数(observe 和 observeSingleEvent),但我不确定为什么 observe 函数不能正常工作。谁能帮帮我?
你所说的打印出来的内容看起来很奇怪,但想法如下:observeSingleEvent will 运行 only once as the name suggested.另一方面,observe 每次需要由 Firebase Cloud 调用该类型时都会调用。这意味着如果您对类型 .childAdded 使用 ** observeSingleEvent**,您的块将只被调用一个 child,通常 。 child为该快照中的每个 child 添加 运行 秒。并且每次添加新的 child 时都会继续调用。如果你想在每次添加新的 child 时更新你的 tableView,你应该使用 observe 和 .childAdded。
我不确定我是否回答了你的问题。如果没有,请告诉我。