gpt4 book ai didi

ios - Firebase 下载完成后如何直接执行代码?

转载 作者:搜寻专家 更新时间:2023-11-01 05:56:28 26 4
gpt4 key购买 nike

我有一些代码需要在 Firebase 完成下载我事先指定它下载的内容后立即执行。问题是此代码始终在下载完成之前运行。

if currentVersionNumber < newVersionNumber {
print("Feed: button donwloading cards")
//self.databaseButton.setTitle("Downloading New Cards...", for: .normal)
ref.observe(.value, with: { snapshot in
print("Feed: Checking for new cards from firebase")
for item in snapshot.children {
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
cardRef.data(withMaxSize: 1 * 1024 * 1024) { (data, error) -> Void in
if (error != nil) {
// Uh-oh, an error occurred!
print("Feed: error occured")
print(error)
} else {
// Data for "images/island.jpg" is returned
cards.imageName = data!
print("Feed: downloaded \(cards.name)")
}
}
// add to updated list of cards

updateCards.append(cards);
}
})

} else {
print("Feed: cards are up to date. \(currentVersionNumber)")
}

})

此代码从 Firebase 数据库下载我想要的项目,但会在完成之前运行它之后的任何代码。如何才能让我可以选择在下载完成后立即执行代码块?

最佳答案

发生这种情况是因为来自 Firebase 的所有更新都发生在后台线程中,而您的代码是在主线程上执行的。要处理此问题,请在一个函数内调用您的 firebase 方法,该函数具有一个闭包,该闭包会在您的 firebase 下载完成后立即调用。

例如:

在你的viewDidLoad中:

override func viewDidLoad() {

super.viewDidLoad()

fetchData {

//do whatever action you wish to perform on download completion
mainTableView.reloadData()
}
}

func fetchData(andOnCompletion completion:@escaping ()->()){

ref.observe(.value, with: { snapshot in
print("Feed: Checking for new cards from firebase")
for item in snapshot.children {
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
cardRef.data(withMaxSize: 1 * 1024 * 1024) { (data, error) -> Void in
if (error != nil) {
// Uh-oh, an error occurred!
print("Feed: error occured")
print(error)
} else {
// Data for "images/island.jpg" is returned
cards.imageName = data!
print("Feed: downloaded \(cards.name)")
}
}
// add to updated list of cards

updateCards.append(cards);
}
//call the block when done processing
completion()
})
}

关于ios - Firebase 下载完成后如何直接执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com