Search code examples
iosswiftparse-platform

iOS Swift & Parse - getDataInBackground not working?


Currently learning Swift & iOS. I try to access with Parse a saved picture. However, I can't access it with getDataInBackground(block:).

Here's my code:

//
//  ViewController.swift
//  Instragram
//
//  Created by Macbook Pro on 22.07.17.
//  Copyright © 2017 Macbook Pro. All rights reserved.
//

import UIKit
import Parse

class ViewController: UIViewController {
    @IBOutlet weak var picture: UIImageView!
    @IBOutlet weak var senderLbl: UILabel!
    @IBOutlet weak var recieverLbl: UILabel!
    @IBOutlet weak var messageLbl: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Creating tables and data in database
        let imageData = UIImageJPEGRepresentation(picture.image!, 0.5)

        let file = PFFile(name: "picture.jpg", data: imageData!)

        let table = PFObject(className: "messages")
        table["sender"] = "Akhmed"
        table["reciver"] = "Bob"
        table["picture"] = file
        table["message"] = "Hello!"
        table.saveInBackground {(success, error) -> Void in
            if(success){
                print("Saved successful")
            } else {
                print(error!)
            }
        }

        //Recieving Data from the Server
        let information = PFQuery(className: "messages")
        information.findObjectsInBackground{(objects: [PFObject]?, error) -> Void in
            if error == nil {
                for object in objects!{
                    self.senderLbl.text = object["sender"] as? String
                    self.recieverLbl.text = object["reciver"] as? String
                    self.messageLbl.text = object["message"] as? String

                    object["picture"].getDataInBackground(...)
                }
            } else {
                print(error!)
            }
        }
    }
}

Down after I access the name, receiver and message string I try to access an image that has been saved on there server with:

object["picture"].getDataInBackground(block:) 

However, Swift won't even autocorrect anymore after I've typed object["picture"]. I get also an error:

'Value of type "Any" has no Member 'getDataInBackground(block:)'

Any ideas what's wrong? It seems to me that Swift can't find the string picture even though the image is saved on the server under the string "picture".


Solution

  • You need to first cast it as a PFFfile object and then retrieve the actual image data with getDataInBackground function like this:

    let imageFile = object["picture"] as? PFFile
    imageFile?.getDataInBackground (block: { (data, error) -> Void in
          if error == nil {
                         if let imageData = data {
                             self.myImage = UIImage(data:imageData)
                         }
          }
    })