致命错误:数组索引超出范围。关于collectionView

时间:2016-03-25 02:47:54

标签: arrays swift parse-platform collectionview

控制器有一个 collectionView ,包括1个单元格,5个部分和一些行,从LeanCloud下载数据就像 Parse 一样。代码始终失败并出现致命错误: 数组索引超出范围 。在我看来,我可能在处理数组数组方面遇到一些问题,关于如何访问以及如何添加元素。任何人都可以帮我解决这个bug吗?错误行列在下面:
var temp = self.restaurantLean [number]

import UIKit
import AVOSCloud

class DiscoverViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, RestaurantLeanCollectionCellDelegate, UIGestureRecognizerDelegate {


@IBOutlet var imageView: UIImageView!

@IBOutlet var collectionView: UICollectionView!

private var restaurantLean = [[RestaurantLean]]()

override func viewDidLoad() {

    super.viewDidLoad()

    collectionView.backgroundColor = UIColor.clearColor()

    loadTripsFromLeanCloud()    

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

//MARK: Data Source
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return restaurantLean.count
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return restaurantLean[section].count
}


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! RestaurantLeanCollectionCell
    cell.delegate = self
    cell.nameLabel.text = restaurantLean[indexPath.section][indexPath.row].name
    cell.typeLabel.text = restaurantLean[indexPath.section][indexPath.row].type
    cell.locationLabel.text = restaurantLean[indexPath.section][indexPath.row].location
    cell.isLike = restaurantLean[indexPath.section][indexPath.row].isLike
    cell.imageView.image = UIImage()
    cell.layer.cornerRadius = 4.0
    if let image = restaurantLean[indexPath.section][indexPath.row].image {
            image.getDataInBackgroundWithBlock({ (imageData, error) -> Void in
                print(image)
                if let data = imageData {
                    print("loading")
                    cell.imageView.image = UIImage(data: data)
                    print("success")
                }
            })
        }
    return cell
}

//Download the data from Baas LeanCloud

func loadTripsFromLeanCloud() {

    restaurantLean.removeAll(keepCapacity: true)

    for number in 0...4 {
        let name = "Restaurant_" + String(number)
        print(name)
        print(number)
        let query = AVQuery(className: name)
        query.cachePolicy = AVCachePolicy.NetworkElseCache
        print("1")
        query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
            print("2")
            if let error = error {
                print("3")
                print("Error: \(error) \(error.userInfo)")
            }
            print("4")
            if let objects = objects {
                print("5")
                for (index, object) in objects.enumerate() {
                    let restaurant = RestaurantLean(avObject: object as! AVObject)
                    self.restaurantLean[number].append(restaurant)
                    let indexPath = NSIndexPath(forRow: index, inSection: number)
                    self.collectionView.insertItemsAtIndexPaths([indexPath])

                }
            }
        })
        print("6")
    }
}

1 个答案:

答案 0 :(得分:0)

您没有向restaurantLean数组本身添加元素(您只将对象添加到嵌套数组)。这是可能的解决方案。

func loadTripsFromLeanCloud() {
    restaurantLean.removeAll(keepCapacity: true)
    for number in 0...4 {
        restaurantLean.append([])  // This line
        // ...
    }
}