对象查看-UICollectionView [英] Objects viewing - UICollectionView

查看:36
本文介绍了对象查看-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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆