2016-05-29 4 views
0

Ich versuche, eine Funktion zu schreiben holt JSON von einem Dienst im Web, aber eine der Zeilen (kommentiert) bleibt Null und ich habe keine Ahnung, warum. Jede Hilfe wird geschätzt! :) Vielen Dank!! Warum gibt NSHTTPURLResponse null zurück? 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 statt NSHTTPURLResponse – AnthonyR

Antwort

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

Die anfängliche Methode nimmt ein NSURLResponse. Dies ist die Antwort der angeforderten URL. NSURLResponse kann jede Art von Antwort sein.

NSHTTPURLResponse ist eine Unterklasse von NSURLResponse. Sie können Ihre Antwort nur dann an NSHTTPURLResponse senden, wenn Sie sicher sind, dass Ihr Webservice Antworten mithilfe des HTTP-Protokolls codiert. Andernfalls gibt der Cast immer nil zurück.

Auch ich sehe, dass der Webservice, die Sie verwenden einige Einschränkungen der Nutzung hat:

Wie genau API-Antwort

1 bekommen Sie dann 1 Mal nicht mehr Anfragen senden pro 10 Minuten von einem Gerät/einem API-Schlüssel. Normalerweise ändert sich das Wetter nicht so häufig.

2 Verwenden Sie den Namen des Servers als api.openweathermap.org. Bitte verwenden Sie niemals die IP-Adresse des Servers.

3 Rufen Sie die API anhand der Stadt-ID anstelle des Städtenamens, der Stadtkoordinaten oder der Postleitzahl auf. In diesem Fall erhalten Sie präzise Antworten genau für Ihre Stadt.

4 Kostenloses Konto hat eine Begrenzung der Kapazität und Datenverfügbarkeit. Wenn Sie keine Antwort vom Server erhalten, versuchen Sie nicht, Ihre Anfrage sofort zu wiederholen, sondern erst nach 10 min. Außerdem empfehlen wir, Ihre bisherigen Anfragedaten unter zu speichern.

Jetzt denke ich, dass Ihr Problem von dort kommen könnte.

Verwandte Themen