2016-12-31 3 views
0

Ich versuche, ein PFFile-Bild basierend auf einer Objekt-ID abzurufen, die an dasselbe Objekt angehängt ist, aus dem ich das imageFile ziehe. Alle anderen Details werden korrekt gezogen (Strings), aber wenn ich den PFFile ziehe, wird ein zufälliges Bild von dieser Klasse geladen, normalerweise nicht das passende Bild für dieses Objekt, unten ist mein Code für wie ich ihn abfrage und ich bin mir nicht sicher wo Meine Logik ist falsch.Parsen Abrufen falscher PFFile

@objc(mapView:didTapMarker:) func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { 
    if z == 0 { 
     print("\(marker) tapped") 

     let lat = marker.position.latitude as Double 
     let long = marker.position.longitude as Double 


     let tempMarker = getMarkerForLongAndLat(long: long, lat: lat, markers: markers) 
     let index = getIndexForMarker(marker: tempMarker) 

     getInfo(self.markersID[index]) { 
      PFFile in 
      self.imageFile?.getDataInBackground(block: { (imageData, error) in 
       if(imageData != nil) { 
        self.fullImage = UIImage(data: imageData!) 
       } 
      }) 
      self.performSegue(withIdentifier: "playerSegue", sender: nil) 
     } 
    } 
    return true 
} 


func getInfo(_ markerID : String, completion: @escaping (PFFile) -> Void) 
{ 
    self.group.enter() 

    print("printing") 
    print(markerLat) 
    print(markerLong) 
    print(postsLat) 
    print(postsLong) 
    print("A") 
    let query = PFQuery(className:"Posted") 
    print("b") 
    print(markerID) 

    //query.whereKey("GPS", equalTo: PFGeoPoint(latitude: markerLat, longitude: markerLong)) 
    query.whereKey("objectId", equalTo: "\(markerID)") 
    query.findObjectsInBackground { (objects, error) in 
     print("c") 
     if(error == nil) 
     { 
      print("d") 

      for object in objects! 
      { 


       print("made it") 
       self.imageFile = (object.object(forKey: "ImageFile") as! PFFile?) 
       self.userofVideo = object.object(forKey: "User") as AnyObject? 
       self.hour = object.object(forKey: "Hour") as AnyObject? 
       self.minutes = object.object(forKey: "minutes") as AnyObject? 
       self.streetName = object.object(forKey: "Location") as AnyObject? 

       self.tempLat = (object.object(forKey: "GPS")! as AnyObject).latitude as Double 
       self.tempLong = (object.object(forKey: "GPS")! as AnyObject).longitude as Double 
       self.currentText = (object.object(forKey: "text")! as Any? as! String?) 
       self.tempCoordinates = CLLocationCoordinate2D(latitude: self.tempLat! as CLLocationDegrees, longitude: self.tempLong! as CLLocationDegrees) 
       //print(tempLong) 

      } 

     } 
     else 
     { 
      print("didn't make it") 
      print(error) 
     } 
     completion(self.imageFile!) 
    } 
    self.group.leave() 

} 

Antwort

0

Fügen Sie den getDataInBackground innerhalb des forloop. Hier ist ein schnelles 3 Beispiel für Ihren Code.

@IBOutlet weak var fullImage : UIImageView! 



      let imageFile = (object.object(forKey: "ImageFile") as? PFFile) 
         imageFile?.getDataInBackground (block: { (data, error) -> Void in 
             if error == nil { 
              if let imageData = data { 
               //Here you can cast it as a UIImage or do what you need to 
               self.fullImage.image = UIImage(data:imageData) 
              } 
             } 
      })