IOS - 从 Firebase 解析对象 - 下载完成前运行的代码
Posted
技术标签:
【中文标题】IOS - 从 Firebase 解析对象 - 下载完成前运行的代码【英文标题】:IOS - Parsing objects from Firebase - Code running before download is completed 【发布时间】:2016-09-02 18:47:36 【问题描述】:我正在尝试将 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()
显示 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)
我可能在这里做一些根本错误的事情。非常需要您的帮助,非常感谢!谢谢,马特
【问题讨论】:
【参考方案1】:observeSingleOfEvent
是一个异步调用,调用completionBlock里面的函数就可以解决,问题是你的打印函数在observeSingleOfEvent
完成下载数据之前就被调用了:-
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()
)
【讨论】:
如果它解决了您的问题,请接受它作为答案:)快乐编码 谢谢 D。我只需要移动 displayNext 函数。谢谢你的回答:)以上是关于IOS - 从 Firebase 解析对象 - 下载完成前运行的代码的主要内容,如果未能解决你的问题,请参考以下文章
(iOS + Firebase)无法将图像从 UITableViewCell 传递给下一个 ViewController
使用 swiftyJSON/swift 从 Firebase 解析排行榜数据