2017-10-04 152 views
0

不從服務器加載數據給出錯誤錯誤=(錯誤?)無無。在錯誤發現之前,它看到pfobjects 4值。然後下載並跳動。並指向一行 - 「let detailPrognozS = object [」detailPrognozS「] as!String」。告訴我什麼是錯的?錯誤=(錯誤?)無無快速解析

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

您是力量展開'對象[ 「detailPrognozS」]'。所以如果服務器的有效載荷不包含'detailPrognozS',那麼你的應用程序崩潰。 – Wukerplank

回答

0

請你能更具體些。我想可能會發生什麼,當你要在後臺獲取數據時,它會觸發下一個for循環來運行,而不是讓它有機會返回數據。

你應該真的清理這段代碼。不應該在網絡調用中設置uilabels文本,它所做的只是返回一個帶有對象和錯誤狀態或零的完成處理程序。請看看我認爲這將有助於的一些MVC模式。短期修復可能會添加「let dispatchGroup = DispatchGroup()」並在進入和離開時進行設置。希望這可以幫助。

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

+0

謝謝。但我有與週期findObjectsInBackground –

+0

連接的錯誤是的,但你也應該有一個錯誤消息映射到對象的數據。你輸入了錯誤的密鑰會發生什麼? –

+0

謝謝你的幫助。我發現自己有一個錯誤,請評價我的反應或重寫。我會進行更正。 –

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) 

             } 

          } 

         }) 
        } 
       } 
      }