我试图将Firebase中的数据解析为一个对象数组,完成后显示数组中第一个对象的文本。但是,在下载完成之前,我无法找到/找到阻止代码继续的解决方案。因此它继续将用户的完成更新为true,而不显示文本。这就是函数本身,下载并附加到数组可以正常工作,但在完成之前它会跳到displayNextInSeries()。。。
func parseSeries (ref: String) {
FIRDatabase.database().reference().child("library").child("series").child(ref).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshot {
print(snap)
if let pushSeriesDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let push = PUSH_SERIES(pushKey: key, pushSeriesData: pushSeriesDict)
self.seriesArray.append(push)
}
}
}
})
print("\(ref) Series Count: \(self.seriesArray.count)")
displayNextInSeries()
}
display next in series函数看到seriesArray.count=0,因此它不会更新texLbl:
func displayNextInSeries() {
if seriesProgress < seriesArray.count {
animateProgress(current: seriesProgress, total: seriesArray.count)
currentPUSH_SERIES = seriesArray[seriesProgress]
currentPUSH_SERIES.text = personaliseText(text: currentPUSH_SERIES.text)
textLbl.animateUpdate(currentPUSH_SERIES.text, oldText: previousText)
titleLbl.text = "\(currentPUSH_SERIES.title!)"
previousText = currentPUSH_SERIES.text
seriesProgress += 1
} else {
animateProgress(current: sessionProgress, total: sessionTarget)
titleLbl.text = ""
greetingPush()
seriesPlay = false
seriesProgress = 0
user.updateProgress(seriesName)
print(user.progress)
}
}
我可能做了一些根本性的错误。非常需要你的帮助,非常感谢!谢谢,马特
最佳答案
observeSingleOfEvent
是一个异步调用,调用completionBlock中的函数将解决此问题,问题是即使在observeSingleOfEvent
下载完数据之前,您的print函数仍在被调用:-
func parseSeries (ref: String) {
FIRDatabase.database().reference().child("library").child("series").child(ref).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshot {
print(snap)
if let pushSeriesDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let push = PUSH_SERIES(pushKey: key, pushSeriesData: pushSeriesDict)
self.seriesArray.append(push)
print("\(ref) Series Count: \(self.seriesArray.count)")
displayNextInSeries()
}
}
}
})
}
关于swift - iOS-从Firebase解析对象-下载完成之前运行的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39298949/