2016-09-29 9 views
0

なぜこのエラーが発生するのですか?上のことを意味し、エラーがあなたがそれアンラップ強制ときurlがnilであるということであるならば、私はJSONの致命的なエラー:予期せず見つからないオプション値をアンラベリングしています。

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

このエラーはどこで発生しますか? – Moritz

+2

あなたの名前(複数 - 複数の 'theTitle'と単一のアイテム' titles')はかなり混乱しています。 Swift 3を使用しているので、 'URL'と' URLRequest'があります。 – vadian

+0

エラーは要求行にあります:let request = NSURLRequest(URL:url:url!URL) –

答えて

2

をしないのです、私は、オプションの値またはオプションのいくつかの並べ替えの面でのチェックわけではない何かが、そこにありますその前に、urlを作成すると、何らかの理由で実際にNSURLオブジェクトに解析できない値をmyURLに渡しています。

myURLを印刷し、それが何であるかを確認してください。私はそれが整形式ではないと確信しています。

とにかく、とにかくアンラッピングを強制しないでください。

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

すごくありがとう。安全なネットのようにアンラップしていますか? –

+1

正確ではありません。 「いいえ、本当に、私を信じて、私がやっていることを知っている」と言わなければならない場合がありますが、オプションの場合は、使用する前に適切にアンラップする必要があります。最も簡単な方法は、 'guard let foo = someOptional'または' if let foo = someOptional'を使うことです。 –

+0

非常に感謝しています。私はすぐに新しいですので、これはとても役に立ちました –

関連する問題