对象查看-UICollectionView [英] Objects viewing - UICollectionView
问题描述
我试图将对象添加到数组中,以便使用UICollection View对其进行查看.我正在使用Firebase使用此代码:
I am trying to add objects to an array in order to view them using UICollection View. I am using this code using 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)
})
但是,循环完成后,将不显示任何对象.另一方面,使用此代码:
But when the loop is done, no objects are shown. On the other hand, using this code :
var pr = Product(name: "a", price: 3, currency: "3", description: "SDF", location: "ASD")
products.append(pr)
对象显示在UICollectionView中.如果以与第二种方法相同的方式添加更多产品,则也会显示它们.我想念什么?在范围内添加对象不会影响范围之外的数组吗?
The object is shown in the UICollectionView. If I add more products the same way I did in the 2nd method, they are shown as well. What am I missing ? Is adding an object inside the scope doesn't effect the array outside?
也-在调试时,我在观察函数中看到prodToAddToView很好地创建了.
Also - while debugging, I saw the prodToAddToView in the observe function there is created fine.
产品的类型为[产品]
products is of type [Products]
此代码位于我的"ViewDidLoad"函数中,因为我想在加载视图之前先加载所有产品.
This code is in my "ViewDidLoad" function, as I want to load all the products before view loads.
推荐答案
您需要在 self.products.append下面的主线程中更新collectionView add
self.collectionView.reloadData()
(prodToAddToView)
You need to update your collectionView addself.collectionView.reloadData()
in main thread below self.products.append(prodToAddToView)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
完整代码
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)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
})
这篇关于对象查看-UICollectionView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!