2016-05-29 114 views
0

我想寫一個函數從Web上的服務獲取JSON,但其中一行(註釋)不斷返回零,我不知道爲什麼。任何幫助表示讚賞! :) 謝謝!!爲什麼NSHTTPURLResponse返回nil? NSURLSession,Swift 2.2

func parseJSON(long: CLLocationDegrees, lat: CLLocationDegrees) { 

    var longitude : String = "\(long)" 
    var latitude : String = "\(lat)" 

    longitude = longitude.substringToIndex(longitude.characters.indexOf(".")!) 
    latitude = latitude.substringToIndex(latitude.characters.indexOf(".")!) 

    print("\(latitude),\(longitude)") 

    let appId = "xyz" //Insert API Key 
    let urlString = "https://api.openweathermap.org/data/2.5/weather?lat=\(latitude)&lon=\(longitude)&units=metric&appid=\(appId)" 

    let requestURL: NSURL = NSURL(string: urlString)! 
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(urlRequest) { 
     (data, response, error) -> Void in 

     //Keeps returning nil. No idea why. 
     if let httpResponse = response as? NSHTTPURLResponse { 

      print("Success!") 
      let statusCode = httpResponse.statusCode 

      if (statusCode == 200) { 
       print("Everyone is fine, file downloaded successfully.") 
      } else { 
       print("STATUSCODE=\(statusCode)") 
      } 

     } 
    } 

    task.resume() 

} 
+0

NSURLResponse代替NSHTTPURLResponse – AnthonyR

回答

1
func dataTaskWithRequest(_ request: NSURLRequest, 
     completionHandler completionHandler: (NSData?, 
            NSURLResponse?, 
            NSError?) -> Void) -> NSURLSessionDataTask 

初始方法採用NSURLResponse。這是所請求的URL的響應。 NSURLResponse可以是任何類型的響應。

NSHTTPURLResponseNSURLResponse的子類,只有在確定您的webservice使用HTTP協議對響應進行編碼時,才能將您的響應轉換爲NSHTTPURLResponse。否則,演員將永遠返回nil

而且,我看到的是你正在使用WebService有使用的一些限制:

如何獲得準確的API響應

1,不要更多的發送請求,然後每10 1次來自一個設備/一個API密鑰的分鐘數。通常情況下,天氣並不會改變,因此經常使用 。

2使用服務器的名稱作爲api.openweathermap.org。請絕不使用 使用服務器的IP地址。

3以城市ID調用API而不是城市名稱,城市座標或郵編 代碼。在這種情況下,您可以準確地爲您的城市做出迴應。

4免費帳戶限制了容量和數據可用性。如果 你沒有得到服務器的迴應,不要試圖立即重複你的 請求,但只能在10分鐘後。此外,我們建議您存儲 您以前的請求數據。

現在我想你的問題可能來自那裏。

相關問題