UICollectionView 和解析图像(Swift)没有错误但崩溃

Posted

技术标签:

【中文标题】UICollectionView 和解析图像(Swift)没有错误但崩溃【英文标题】:UICollectionView and Parse Images ( Swift ) No Error but Crash 【发布时间】:2015-07-18 19:13:50 【问题描述】:

程序启动并显示来自解析的图像,没有错误,当我再次运行它时它崩溃了。我的问题是是否是因为图像未缩放到自定义单元格的正确大小。

这里是错误:项目宽度必须小于 UICollectionView 的宽度减去部分插入左右值。 致命错误:数组索引超出范围

这是我的功能:

// 获取品牌 func getBrand ()

        // Create PFQuery
        var query:PFQuery = PFQuery(className: "BrandInfo")

        // Call findobjects
        query.findObjectsInBackgroundWithBlock 
            (objects:[AnyObject]?, error: NSError?) -> Void in

            // refresh array
            self.brands = [String]()
            self.pics = [UIImage]()

            // loop through array
            for brandObject in objects! 

            // get PFObjects
            let brandName:String? = (brandObject as! PFObject)["Name"] as? String

                if brandName != nil 
                    self.brands.append(brandName!)

                

            let brandPicture = brandObject["Image"] as! PFFile
                brandPicture.getDataInBackgroundWithBlock( (imageData:NSData?, error:NSError?) -> Void in

                    if(error == nil)

                    let brandImage = UIImage(data: imageData!)
                        self.pics.append(brandImage)

                        println(self.pics.count)
                    
                )

    
        // Refresh CollectionView
        self.collectionView.reloadData()


// Setting up collection view
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return self.brands.count


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell:collectionViewCell = self.collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! collectionViewCell

    // Get elements
    let picToDisplay:UIImage? = pics[indexPath.row]  // here is where the warning occurs
    let dataToDisplay:String = brands[indexPath.row]

    let imageView:UIImageView? = cell.viewWithTag(2) as? UIImageView


    // Set labels
    cell.brandImage.image = picToDisplay
    cell.brandLabel.text = dataToDisplay


    return cell

【问题讨论】:

【参考方案1】:

检查品牌和图片数组的计数是否相同。

在您的情况下,仅当您同时使用brandImage 和 BrandName 时才应附加数组。这样您的图片和品牌数组计数将相同。

【讨论】:

是的,它的计数相同,它显示了一次图像,然后当我再次运行它时,它在这条线上崩溃让 picToDisplay:UIImage? = pics[indexPath.row]

以上是关于UICollectionView 和解析图像(Swift)没有错误但崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 加载延迟并且滚动非常颠簸

UICollectionView 中的 Alamofire + Swift

UICollectionView 和图像

UIcollectionView 具有缓慢的图像加载和滚动

UICollectionView 检测滚动方向和更改图像

在 UICollectionView 中显示图像 - 如何实现图像之间的固定垂直间距?