Ios Firebase不更新值
我正在使用Ios Firebase不更新值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在使用FirebaseManagersingleton类从Firebase获取数据。我正在调用我的ViewController中的getAllCharts,它需要这些数据。我最初收到数据,但当我在firebase中更新数据时,它不会更新应用程序中的值(getAllCharts()is从不调用) FirebaseManager: 视图控制器: 如何获取更新?尝试从FirebaseManager.sharedInstance.getAllCharts完成块中删除[weak self]。@Zaid
FirebaseManager
singleton类从Firebase获取数据。我正在调用我的ViewController
中的getAllCharts
,它需要这些数据。我最初收到数据,但当我在firebase中更新数据时,它不会更新应用程序中的值(getAllCharts()
is从不调用)
FirebaseManager:
视图控制器:
如何获取更新?尝试从
FirebaseManager.sharedInstance.getAllCharts
完成块中删除[weak self]
。@ZaidPathan我尝试过,但仍然是相同的问题。您也在引用下添加了断点。子(路径)。观察(.value,带:{(快照)在
中,然后更改Firebase上的值并选中?@ZaidPathan设置断点仅适用于初始调用,此时调用ViewDidLoad。此时我只能获取一次数据,但在该点之后更新值时,我的getAllCharts将不会被调用,此时设置断点无效(我试过了)@ZaidPathan我“修复”了它,我也在AppDelegate中调用了这个getAllCharts()方法,因为我想在应用程序启动时下载数据,删除AppDelegate中的这个调用可以让一切都正常工作。尽管我不知道为什么它现在能正常工作(我宁愿让它先在AppDelegate中下载)
final class FirebaseManager {
static let sharedInstance = FirebaseManager()
private init() {}
private let reference = FIRDatabase.database().reference()
private var charts = [ChartRepresentable]()
func getAllCharts(completionHandler: ((_ charts: [ChartRepresentable]) -> ())? = nil) {
guard let path = FirebasePath.allCharts.path else {
return
}
guard charts.isEmpty else {
completionHandler?(charts)
return
}
reference.child(path).observe(.value, with: { (snapshot) in
if snapshot.hasChildren() {
var availableCharts = [ChartRepresentable]()
for child in snapshot.children {
guard let chartSnapshot = child as? FIRDataSnapshot else {
continue
}
switch chartSnapshot.key {
case "bar":
availableGraphs.append(BarChart(snapshot: chartSnapshot))
case "line":
availableGraphs.append(LineChart(snapshot: chartSnapshot))
default: break
}
}
self.charts = availableCharts
completionHandler?(self.charts)
}
})
}
}
class ViewController: UIViewController {
var setupCards: [SetupCard]?
override func viewDidLoad() {
super.viewDidLoad()
FirebaseManager.sharedInstance.getAllCharts { [weak self] (charts) in
self?.setupCards = [SetupCard(charts: charts)]
self?.setupView.collectionView.reloadData()
self?.setupView.pageControl.numberOfPages = self?.setupCards?.count ?? 0
}
}