将重复数据添加到数组:错误

时间:2017-11-03 12:58:42

标签: swift

我的问题是将重复数据添加到数组

我的程序在手动刷新之前运行良好,但在手动刷新时重复添加到列表中

当我检查打印件时,数据被添加到双列表

打印结果

  

ARRAYLAR:[“示例”,“示例”]

观看视频,以便更好地了解问题 VİDEO

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self

    getData()
}



@objc func getData() {


        self.konuAdiArray.removeAll(keepingCapacity: false)
        self.konuHedefTarihArray.removeAll(keepingCapacity: false)
        self.konuTestArray.removeAll(keepingCapacity: false)
        self.konuIDArray.removeAll(keepingCapacity: false)
        self.veriGirisArray.removeAll(keepingCapacity: false)




    Database.database().reference().child("users").child((Auth.auth().currentUser?.uid)!).child("dersler").child(gelenDersID!).child("konular").observe(DataEventType.childAdded) { (snapshot) in
        let values = snapshot.value! as! NSDictionary


            self.konuAdiArray.append(values["konuAdi"]as! String)
            self.konuHedefTarihArray.append(values["konuHedefTarihi"]as! String)
            self.konuTestArray.append(values["konuTestHedefi"]as! String)
            self.veriGirisArray.append(values["veriGirisSoru"]as! String)
            self.konuIDArray.append(snapshot.key)

        print("ARRAYLAR : \(self.konuAdiArray)")

        self.tableView.reloadData()

    }

}

refreshBarButton代码

@IBAction func refreshBarButton(_ sender: Any) {
    getData()
}

2 个答案:

答案 0 :(得分:0)

手动刷新没有理由。您正在观察Firebase数据库上的childAdded,该数据库将继续实时更新。每当您点击手动刷新时,getData()都会将您的控制器再次添加为观察者 。要么删除手动刷新控件,只需让Firebase执行它的操作(这是它擅长的 - 无需手动刷新的实时更新),或者将childAdded观察更改为一次性数据提取。

答案 1 :(得分:0)

您需要单独使用函数来观察数据库的更改。当您致电getData()时,您会调用两次数据库更改。因此,您再次订阅更改,这就是为什么我建议您制作setDataBaseObserver()之类的单独功能,您只需在viewDidLoad中拨打一次。如果要更新数据,则应该发出网络请求或从不同的来源(而不是再次从数据库)获取它们。希望你理解我吧!

func setDataBaseObserver() {
    Database.database().reference().child("users").child((Auth.auth().currentUser?.uid)!).child("dersler").child(gelenDersID!).child("konular").observe(DataEventType.childAdded) { (snapshot) in
       let values = snapshot.value! as! NSDictionary
         self.konuAdiArray.append(values["konuAdi"]as! String)
         self.konuHedefTarihArray.append(values["konuHedefTarihi"]as! String)
         self.konuTestArray.append(values["konuTestHedefi"]as! String)
         self.veriGirisArray.append(values["veriGirisSoru"]as! String)
         self.konuIDArray.append(snapshot.key)
         print("ARRAYLAR : \(self.konuAdiArray)")
         self.tableView.reloadData()
    }
}

希望它对你有所帮助!