2017-10-04 4 views
0

Laden Sie keine Daten vom Server gibt einen Fehler Fehler = (Fehler?) Nil keine .Bevor der Fehler sieht es die pfobjects 4 Werte.Dann herunterladen und schlägt. Und zeigt auf eine Zeile - "lost detailPrognozS = object [" detailPrognozS "] als! String". Sag mir, was los ist?Fehler = (Fehler?) Keine Swift Parse

func detailObject() { 



      let query = PFQuery(className: "soccer") 
      query.findObjectsInBackground { (objects:[PFObject]?, error:Error?) in 
       if error == nil { 
        for object in objects! { 
         let detailPrognozS = object["detailPrognozS"] as! String 
         let detailTitleS = object["detailTitleS"] as! String 
         let detailTextS = object["detailTextS"] as! String 
         let imageDetail = object["detailImageS"] as! PFFile 
        DispatchQueue.main.async { [unowned self] in       self.prognozDetail.text = detailPrognozS 
          self.textView.text = detailTextS 
          self.titleDetail.text = detailTitleS 


         } 

         imageDetail.getDataInBackground(block: { (data:Data?, error:Error?) in 
          if error == nil { 
           DispatchQueue.main.async { [unowned self] in 
           let imageData = data 

           self.imageDetail.image = UIImage(data: imageData!) 

             } 

          } 

         }) 
        } 
       } 
      } 
+0

Sie sind Kraft Abwickeln 'Objekt [ "detailPrognozS"]'. Wenn also die Payload vom Server keine detailprognozS enthält, stürzt Ihre App ab. – Wukerplank

Antwort

0

Bitte könnten Sie ein wenig mehr spezifisch sein. Ich könnte mir vorstellen, dass wenn Sie die Daten im Hintergrund abrufen, die nächste for-Schleife ausgelöst wird und keine Chance hat, die Daten zurückzugeben.

Sie sollten diesen Code jedoch wirklich aufräumen. Sollte kein Uilabels-Text innerhalb eines Netzwerkaufrufs gesetzt werden, kann er nur einen Beendigungshandler mit einem Objekt und dem Fehlerstatus oder NULL zurückgeben. Bitte schauen Sie sich einige MVC-Muster an. Ich denke, das wird Ihnen helfen. Kurzfristige Lösung wäre möglicherweise eine "lost dispatchGroup = DispatchGroup()" hinzufügen und festlegen, wann es eintritt und verlässt. Hoffe das hilft.

https://developer.apple.com/documentation/dispatch/dispatchgroup https://www.raywenderlich.com/160651/design-patterns-ios-using-swift-part-12

+0

Danke. Aber ich habe den Fehler mit dem Zyklus findObjectsInBackground verbunden –

+0

Ja, aber Sie sollten auch eine Fehlermeldung für die Zuordnung der Daten, die Sie auf das Objekt erhalten. Was passiert, wenn Sie den falschen Schlüssel eingeben? –

+0

Vielen Dank für die Hilfe. Ich habe einen Fehler gefunden.Bitte bewerten Sie meine Antwort oder umschreiben.Ich mache die Korrektur. –

0
let query = PFQuery(className: "soccer") 
      query.findObjectsInBackground { (objects: [PFObject]?, error) -> Void in 
       if error == nil { 
        for object in objects! { 



         self.prognozDetail.text = object["detailPrognozS"] as? String 
         self.textView.text = object["detailTextS"] as? String 
         self.titleDetail.text = object["detailTitleS"] as? String 
         let imageDetail = object["detailImageS"] as? PFFile 


         imageDetail?.getDataInBackground(block: { (data:Data?, error:Error?) in 
          if error == nil { 

            if let imageData = data { 

             self.imageDetail.image = UIImage(data: imageData) 

             } 

          } 

         }) 
        } 
       } 
      }