gpt4 book ai didi

ios - Firebase 完成用户数据下载后如何重新加载 UITableView 数据?

转载 作者:行者123 更新时间:2023-11-28 16:11:35 25 4
gpt4 key购买 nike

所以我对 firebase 有疑问,因为它是异步的,我不知道如何正确使用它。我的应用程序有待售产品的提要,我是从 firebase 数据库和 firebase 存储(图片)中获取的。问题是我不知道何时或如何重新加载我的 UITableView 以获取所有数据而不会出现 nil 错误。而且它更复杂,因为首先我需要从 firebase 获取我的 salePost 信息,然后我才能获得也在 tableview 单元格中的用户信息。

这就是我获取 salePosts 的方式

    func getSalePosts() -> [SalePost]{

var salePosts = [SalePost]()

FIR_DATABASE_SALE_POSTS.queryLimitedToFirst(NUMBER_OF_LOADED_POSTS).observeEventType(.Value, withBlock: { (snapshot) in

for snap in snapshot.children{

let imgString = snap.value["image"] as! String!
let imgNSURL = NSURL(string: imgString)
let imgNSDATA = NSData(contentsOfURL: imgNSURL!)

let downloadedImg = UIImage(data: imgNSDATA!)

let newSalePost = SalePost(title: snap.value["title"] as! String!,
userUID: snap.value["authorUID"] as! String!,
postBody: snap.value["body"] as! String!,
amountAvailable: snap.value["amountAvailable"] as! String!,
unit: snap.value["unit"] as! String!,
price: snap.value["price"] as! String!,
image: downloadedImg!)

salePosts.append(newSalePost)
print("num of posts \(salePosts.count)")
}

}) { (error) in
print(error.localizedDescription)
}

return salePosts
}

这是获取 UserInfo 的函数(我将从 salePost 对象中获取“userUID”)

    func getProducer(userUID:String) -> Producer{


var newProducer:Producer?

FIR_DATABASE_USERS.child(userUID).observeEventType(.Value, withBlock: { (snap) in

print(snap.description)

let imgString = snap.value!["profilePic"] as! String!
let imgNSURL = NSURL(string: imgString)
let imgNSDATA = NSData(contentsOfURL: imgNSURL!)
let downloadedImg = UIImage(data: imgNSDATA!)


let someProducer = Producer(
displayName: snap.value!["displayName"] as! String!,
address: snap.value!["address"] as! String!,
mobile: snap.value!["mobile"] as! String!,
email: snap.value!["email"] as! String!,
password: "",
bio: snap.value!["bio"] as! String!,
profilePic: downloadedImg!,
openingHour: snap.value!["openingHour"] as! String!,
closingHour: snap.value!["closingHour"] as! String!)

newProducer = someProducer
print(newProducer?.description)

}) { (error) in
print(error.localizedDescription)
}

return newProducer!
}

正如我所说,我不知道何时、何地以及如何调用这些函数(在我的提要 Controller 中)以使其“同步”并将所有数据正确地传送到 tableview 单元格。我会感激每一个帮助。我尝试用谷歌搜索它,甚至在这里找到它,但没有任何帮助。

最佳答案

一旦您创建了所有的salePosts,您应该调用tableView.reloadData()。因此,在您循环创建您将 newSalePost 附加到 salePosts 的位置之后。由于这是一个异步调用,因此在您的函数结束时返回您的 salePosts 是无用的。

我假设您的 viewController 有一个属性 tableView 并且您设置了 tableView 的 delegatedatasource 成为您的 viewController

不要忘记在主线程上调用 tableView.reloadData()

例如:Dispatch.main.async { self.tableView.reloadData() }

关于ios - Firebase 完成用户数据下载后如何重新加载 UITableView 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487070/

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