【发布时间】:2018-02-08 16:49:33
【问题描述】:
我正在尝试将对象添加到数组中,以便使用 UICollection 视图查看它们。我正在使用 Firebase 使用此代码:
// Retrieve the products and listen for changes
databaseHandle = ref?.child("Products").observe(.childAdded, with:
{ (snapshot) in
// Code to execute when new product is added
let prodValue = snapshot.value as? NSDictionary
let prodName = prodValue?["Name"] as? String ?? ""
let prodPrice = prodValue?["Price"] as? Double ?? -1
let prodDesc = prodValue?["Description"] as? String ?? ""
var prodToAddToView = Product(name: prodName, price: prodPrice, currency: "USD", description: prodDesc, location: "USA")
self.products.append(prodToAddToView)
})
但是当循环完成时,不会显示任何对象。另一方面,使用此代码:
var pr = Product(name: "a", price: 3, currency: "3", description: "SDF", location: "ASD")
products.append(pr)
对象显示在 UICollectionView 中。如果我以与第二种方法相同的方式添加更多产品,它们也会显示出来。我错过了什么?在范围内添加对象不会影响外部数组吗?
另外 - 在调试时,我看到那里的观察函数中的 prodToAddToView 创建得很好。
产品的类型是 [产品]
编辑:
此代码在我的“ViewDidLoad”函数中,因为我想在视图加载之前加载所有产品。
【问题讨论】:
-
您的调用是异步的,您需要在
append()之后执行yourCollectionView.reloadData(),并在主线程中执行(因为它与UI 相关,我不确定observe()闭包在主线程中。 -
这没有成功。这段代码是在 ViewDidLoad 方法中编写的,因为我想在视图加载之前将项目加载到集合视图中。在继续之前,我需要一些方法来确保异步调用完成。我该怎么做?
标签: ios swift firebase uicollectionview