gpt4 book ai didi

ios - (Swift + Firebase) 将 observeSingleEvent 转换为观察 .childAdded

转载 作者:行者123 更新时间:2023-11-28 15:18:05 25 4
gpt4 key购买 nike

我的 viewDidLoad 函数中有一个 observeSingleEvent,我想将其更改为带有 .childAdded 的 observe,以便它会持续监听并在对象添加到数据库时添加它们。

这是从 firebase 读取的代码:

let parentRef = Database.database().reference().child("Recipes")

parentRef.observeSingleEvent(of: .value, with: { snapshot in

// PROCESSES VALUES RECEIVED FROM SERVER
if ( snapshot.value is NSNull ) {

// DATA WAS NOT FOUND
print("– – – Data was not found – – –")

} else {

// DATA WAS FOUND
for user_child in (snapshot.children) {

let user_snap = user_child as! DataSnapshot
let dict = user_snap.value as! [String: String?]

// DEFINE VARIABLES FOR LABELS
let recipeName = dict["Name"] as? String
let recipeDescription = dict["Description"] as? String

food.append(Element(name: recipeName!, description: recipeDescription!))

self.tableView.reloadData()
}
}
})

我现在遇到的另一个问题(除了它只加载一次)是,每当我转到应用程序中的另一个 View 然后返回时,它会再次读取所有内容,所以我会在我的 tableView 中获得所有内容的副本,这是否仍然会发生用观察?

编辑:

这是我的数据库的样子:

Recipes
-Kv7FAqgLtDrRoyGd-99
Description: "food description"
Name: "food name"
-KvBuzMUnIQXn8gpG2WL
Description: "food description2"
Name: "food name2"
-KvH6yYeJaThK7oP8xBj
Description: "food description3"
Name: "food name3"

最佳答案

  1. 更改 observeSingleEvent 以进行观察。
  2. 每当观察到新值时清空食物数组。
  3. 在 for 循环之外重新加载您的食物数组,以便仅在将所有项目加载到数组中时才重新加载。

    let parentRef = Database.database().reference().child("Recipes")

    // 1. Change to observe
    parentRef.observe(.value, with: { snapshot in

    // PROCESSES VALUES RECEIVED FROM SERVER
    if ( snapshot.value is NSNull ) {

    // DATA WAS NOT FOUND
    print("– – – Data was not found – – –")

    } else {

    // 2. Empty food array
    self.food = []

    // DATA WAS FOUND
    for user_child in (snapshot.children) {

    let user_snap = user_child as! DataSnapshot
    let dict = user_snap.value as! [String: String?]

    // DEFINE VARIABLES FOR LABELS
    let recipeName = dict["Name"] as? String
    let recipeDescription = dict["Description"] as? String

    food.append(Element(name: recipeName!, description: recipeDescription!))

    }
    // 3. reload tableview outside loop
    self.tableView.reloadData()
    }
    })

通过在每次观察到新值时清空食物数组,您可以确保只显示数据库中存在的值,因此绝不会出现重复元素。

关于ios - (Swift + Firebase) 将 observeSingleEvent 转换为观察 .childAdded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com