I am getting images from an async request and adding them to a [UIImage]() so that I can populate my UITableView images with those from the array. The problem is, I keep getting Fatal error: Array index out of range in the cellForRowAtIndexPath function when this is called, and I suspect it may be because I'm making an async call? Why can't I add an image from the array to the table view row?
   var recommendedImages = [UIImage]()
        var jsonLoaded:Bool = false {
            didSet {
                if jsonLoaded {
                    // Reload tableView on main thread
                    dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) { // 1
                        dispatch_async(dispatch_get_main_queue()) { // 2
                            self.tableView.reloadData() // 3
                        }
                    }
                }
            }
        }
    override func viewDidLoad() {
            super.viewDidLoad()
           // ...
          let imageURL = NSURL(string: "\(thumbnail)")
          let imageURLRequest = NSURLRequest(URL: imageURL!)
          NSURLConnection.sendAsynchronousRequest(imageURLRequest, queue: NSOperationQueue.mainQueue(), completionHandler: { response, data, error in
          if error != nil {
              println("There was an error")
         } else {
              let image = UIImage(data: data)
              self.recommendedImages.append(image!)
              self.jsonLoaded = true
         }
        })
    }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var songCell = tableView.dequeueReusableCellWithIdentifier("songCell", forIndexPath: indexPath) as! RecommendationCell
        songCell.recommendationThumbnail.image = recommendedImages[indexPath.row]
        return songCell
    }
Edit: My numberOfRowsInSection method. recommendedTitles is from the same block of code that I excluded. It's always going to be 6.
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return recommendedTitles.count
    }
				
                        
Your error is you return 6 in
numberOfRowsInSection,so tableview know that you have 6 cellBut,when execute
cellForRowAtIndexPath,your image array is empty,so it crashed.Try this
Also switch to main queue,this is enough