2016-10-12 13 views
-1
let url1 = "https://jsonplaceholder.typicode.com/posts" 
var request = URLRequest(url: URL(string: url1)!) 
request.httpMethod = "GET" 
let urlSession = URLSession.shared 
let task = urlSession.dataTask(with: request, completionHandler: {(data,response,error) -> Void in 
    if let error = error { 
     print(error) 
     return 
    } 
    if let data = data { 
     OperationQueue.main.addOperation({() -> Void in 
      self.tableView.reloadData() 
     }) 
    } 
}) 
task.resume() 

Mit oder ohne http-Methode sind die Antwortdaten leer. Was mache ich falsch? WiFi funktioniert gut. Vielleicht ein Problem mit meinen Simulatoreinstellungen?Daten kommen nicht JSON-Parsing

Ja danke, aber Ihr Code funktioniert nicht auch, ich meine, Daten sind leer, nichts zu analysieren. WiFi auf meinem Emulator funktioniert gut vielleicht Problem auf meinem xcode8?

+0

Bitte klären, was Ihr Problem ist. Welches Debugging hast du gemacht? Was genau passiert, wenn Sie diesen Code ausführen? – rmaddy

+0

jsonArray = versuche JSONSerialization.jsonObject (mit: data, options: .allowFragments) as! [[String: Any]] benutze diese Zeile –

+0

Überprüfen Sie meine Antwort nur ersetzen Sie Ihre Methode mit mir, die Sie Ihre Ausgabe –

Antwort

0

Wie rmaddy gesagt, Sie benötigen, um Ihre Frage zu klären, aber hier ist, wie kann ich Ihnen empfehlen, dies zu tun, statt:

let url = URL(string: "https://jsonplaceholder.typicode.com/posts") 
URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in 
    guard let data = data, error == nil else { return } 

    do { 
     let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) 
     let posts = json as? [[String: Any]] ?? [] 

     print(posts) 

     for post in posts{ 
      guard let title = post["title"] as? String, 
        let userId = post["userId"] as? Int, 
        let id = post["id"] as? Int, 
        let body = post["body"] as? String else { continue } 
      print(title, userId, id, body) 
     } 
    } catch let error as NSError { 
     print(error) 
    } 
}).resume() 

Im for post in posts nach dem guard was bedeutet, dass Sie erfolgreich die es geschafft haben, zu bekommen Daten, müssen Sie die Variablen in einem Array hinzufügen und laden Sie dann Ihre tableView. Aber dadurch erhalten Sie Ihre Daten auf sichere Weise.

0

Einige Änderungen in Ihrem Code vorgenommen.

let url = NSURL(string: "https://jsonplaceholder.typicode.com/posts") 
     NSURLSession.sharedSession().dataTaskWithRequest(NSURLRequest.init(URL: url!), completionHandler: {(data, response, error) in 
     guard let data = data where error == nil else { return } 
     do { 
      let posts = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 
      print(posts) 
      } catch let error as NSError { 
       print(error) 
       } 
      }).resume() 

Ausgang: Hier Ihr alle 100 Post Anzeige

Verwandte Themen