2017-07-23 2 views
0

En cours d'apprentissage Swift & iOS. J'essaie d'accéder à Parse avec une image enregistrée. Cependant, je ne peux pas y accéder avec getDataInBackground(block:).iOS Swift & Parse - getDataInBackground ne fonctionne pas?

Voici mon 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!) 
      } 
     } 
    } 
} 

vers le bas après je avoir accès au nom, récepteur et chaîne message que je tente d'accéder à une image qui a été enregistrée là-bas serveur avec:

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

Cependant, Swift ne sera même plus automatiquement corrigé après avoir tapé object["picture"]. Je reçois également une erreur:

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

Des idées quel est le problème? Il me semble que Swift ne peut pas trouver la chaîne picture même si l'image est enregistrée sur le serveur sous la chaîne "image".

+0

Lire l'erreur. 'object [" picture "]' est un 'Any', pas une classe plus spécifique. Vous avez besoin d'un casting là-bas. – rmaddy

Répondre

1

Vous devez d'abord jeter comme un objet PFFfile puis récupérer les données d'image réelle avec la fonction getDataInBackground comme ceci:

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) 
        } 
     } 
}) 
+0

Cela a beaucoup aidé, même si j'ai dû changer deux choses, cela a parfaitement fonctionné. Merci – Prometheus