2015-07-19 79 views
0

嗨Im新快速,需要一些幫助謝謝。該計劃曾經工作過一次,試圖再次運行,然後墜毀。當我調試時,這些項目在數組中,但是當我嘗試顯示圖像時,我得到了致命錯誤。Swift:UICollectionView&UIImage致命錯誤:數組索引超出範圍

// Get Brands 
    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] // this is the error line 
    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 

} 

///////////////////////////////

結構brandCollection {

var brandText:[String] = [String]() 
    var brandImage:[UIImage?] = [UIImage]() 

} 

回答

0

你有brands.count項目,你需要brand.count圖像。但是,您正在使用不同的陣列pics,如果它的元素少於brands,將會失敗。看看你的代碼,爲什麼會發生這種情況有幾種可能性。

這是不好的設計。你應該有一個數據數組來封裝你需要的所有信息。每個圖像應該連接到它的對象(品牌),而不是保存在其他數組中。

+0

感謝您的回覆。我甚至不知道如何做到這一點,例如? –

+0

歡迎來到Stackoverflow。對不起,但你必須寫自己的代碼;-)。給你的品牌課一個屬性'圖像'並在那裏存儲圖像。 – Mundi

+0

我指的是YouTube視頻或者其他什麼,但是無論如何感謝你 –

相關問題