2016-09-29 2 views
0

Ich bin mir nicht sicher, warum ich diesen Fehler erhalte. Gibt es etwas, das ich nicht für in Bezug auf einen beliebigen Wert oder irgendeine Art von Option bin Überprüfung, die ichSchwerwiegender JSON-Fehler: unerwartet wurde beim Entpacken ein Nullwert gefunden. Optionaler Wert

func getJSON(){ 

    let url = NSURL(string: myURL) 
    let request = NSURLRequest(url: url! as URL) 
    let session = URLSession(configuration: URLSessionConfiguration.default) 
    let task = session.dataTask(with: request as URLRequest) { (data,response,error) -> Void in 

     if error == nil { 

      let swiftyJSON = JSON(data:data!) 

      let theTitle = swiftyJSON["results"].arrayValue 

      for title in theTitle{ 

       let titles = title["title"].stringValue 
       print(titles) 
      } 


     } else{ 
      print("Error") 
     } 
    } 
    task.resume() 
} 
+1

Woher bekommen Sie diesen Fehler, welche Zeile? – Moritz

+2

Ihre Benennung (Plural - mehrere Elemente 'theTitle' und Singular - ein Element' titles') ist ziemlich verwirrend. Und da Sie Swift 3 verwenden, gibt es 'URL' und' URLRequest'. – vadian

+0

Der Fehler ist in der Anforderungszeile: lass Anfrage = NSURLRequest (URL: URL! Als URL) –

Antwort

2

bin fehlt Wenn der Fehler ist, dass url Null ist, wenn Sie unwrap es zwingen, dann die auf die das impliziert Zeile davor, wo Sie erstellen url Sie haben einen Wert in myURL übergeben, die tatsächlich in ein NSURL Objekt aus irgendeinem Grund nicht geparst werden kann.

Drucken Sie myURL aus und sehen Sie, was es ist. Ich wette, es ist nicht gut geformt.

Nebenbei sollten Sie sowieso nicht zwanghaft auspacken. Versuchen Sie etwas wie folgt:

guard let url = NSURL(string: myURL) else { 
    print("Couldn't parse myURL = \(myURL)") 
    return 
} 

let request = NSURLRequest(url: url as URL) // <-- No need to force unwrap now. 
+0

wow vielen dank. Ist also das Auspacken wie ein Sicherheitsnetz? –

+1

Nicht genau. Es gibt einige Fälle, in denen Sie sagen müssen: "Nein, wirklich, vertraue mir, ich weiß, was ich tue", aber wenn du ein optionales Modul hast, musst du es vor dem Gebrauch auspacken. Der einfachste Weg ist die Verwendung von 'guard let foo = someOptional' oder' if let foo = someOptional'. –

+0

Sehr geschätzt. Ich bin neu zu schnell, so dass dies sehr hilfreich war –

Verwandte Themen