Jimmy lemieux
Jimmy lemieux

Reputation: 439

GetDataInBackgroundWithBlock | imageData is returning a nil value

So I am saving some objects to the localDatastore using parse.

//Pin the objects here!!
var imageObject = PFObject(className: "img")
imageObject["theFile"] = imageFile
imageObject.pinInBackgroundWithBlock({ (success, error) -> Void in
   if error == nil {
        imageObject.saveEventually()
        println("object pinned in background")
   } else {
        println(error)
   }
})

Then in the viewDidLoad I am querying the objects and appending them into an array of PFFile's

var query = PFQuery(className: "img")
query.fromLocalDatastore()
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
   if error == nil{
        var objects : AnyObject = objects as! AnyObject
        for object in objects as! [AnyObject]{
            self.testImages.append(object["theFile"] as! PFFile)
        }
   } else {
       println(error)
   }
}

With this array now containing data. I am trying to insert the images into the tableView

if testImages.count >= 1{
     testImages[indexPath.row].getDataInBackgroundWithBlock({ (imageData, error) -> Void in
        if error == nil{
           //The app crashes here ~ fatal error: unexpectedly found nil while unwrapping an Optional value
           cell.theImage.image = UIImage(data: imageData!)
         } else {
            println(error)
         }
    })
}

Upvotes: 0

Views: 134

Answers (1)

Lamour
Lamour

Reputation: 3040

Because you are using a tableview, I think the best way is to download all the images from Parse and save it to an array. Then in the cellForRowAtPath method then you assign each index of that array to the cell.imageView.image

 var query = PFQuery(className:"img")
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in
    if error == nil
    {
        if let objects = objects as? [PFObject]
        {
            for one in objects 
           {
               var pictureImage = one["theFile"] as! PFFile
                pictureImage.getDataInBackgroundWithBlock({ (dataToget:NSData?, error:NSError?) -> Void in
                    if error == nil 
                    {
                   if let  Image = UIImage(data: dataToget)
                     {
                        // save the image to array 
                        // reload the tableview
                      }
                    }
               })

             }
         }
    }
}

Upvotes: 0

Related Questions