我的问题是将重复数据添加到数组
我的程序在手动刷新之前运行良好,但在手动刷新时重复添加到列表中
当我检查打印件时,数据被添加到双列表
打印结果
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()
}
答案 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()
}
}
希望它对你有所帮助!