我的viewDidLoad函数中有一个observeSingleEvent,我希望将它更改为带有.childAdded的观察,以便它可以不断监听并在添加到数据库时添加对象。
这是从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()
}
}
})
我现在遇到的另一个问题(除了它只加载一次)是每当我去应用程序中的另一个视图然后再回来它再次读取所有内容所以我得到了我的tableView中的所有内容的重复,这仍然会发生用观察?
编辑:
以下是我的数据库:
Recipes
-Kv7FAqgLtDrRoyGd-99
Description: "food description"
Name: "food name"
-KvBuzMUnIQXn8gpG2WL
Description: "food description2"
Name: "food name2"
-KvH6yYeJaThK7oP8xBj
Description: "food description3"
Name: "food name3"
答案 0 :(得分:1)
在for-loop之外重新加载食物阵列,这样只有在将所有物品装入阵列后才能重新加载。
{{1}}
通过在观察新值时清空食物数组,您可以确保仅显示数据库中存在的值,从而不会出现重复元素。