(Swift Firebase)转换观察levent以观察.Childadded



我在查看didload函数中有一个观察力,我想将其更改为使用.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()
            }
        }
    })

我现在遇到的另一个问题(此外,只有一次加载一次)是,每当我转到应用程序中的另一个视图然后再回来时,它将再次读取所有内容与观察?

编辑:

这是我的数据库的样子:

Recipes
   -Kv7FAqgLtDrRoyGd-99
       Description: "food description" 
       Name: "food name" 
   -KvBuzMUnIQXn8gpG2WL
       Description: "food description2"  
       Name: "food name2"  
   -KvH6yYeJaThK7oP8xBj
       Description: "food description3"  
       Name: "food name3"
  1. 改变观察的观察。
  2. 每当观察新值时,空食物阵列。
  3. 在循环外面重新加载食物阵列,以便只有在将所有物品加载到阵列中时才能重新加载。

    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()
        }
    })
    

每当观察新值时清空食物阵列,您可以确保仅显示数据库中存在的值,从而永远不会具有重复性元素。

最新更新