2016-04-06 17 views
0

バーコードをスキャンし、http rest callを使用してサーバーからJSONデータを取得するメソッドを作成しようとしています。 Alamofireは今は動作しません。私はさまざまな方法で試しました。 致命的なエラー: swift2.0、xcode7.3でhttpリクエストからJSONデータを取得する方法

let getEndpoint: String = "45.55.63.218:8080/food?foodidentifier=\(code)" 
    let requestURL: NSURL = NSURL(string: getEndpoint)! 
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(urlRequest) { 
     (data, response, error) -> Void in 

     let httpResponse = response as! NSHTTPURLResponse 
     let statusCode = httpResponse.statusCode 

     if (statusCode == 200) { 
      print("Everyone is fine, file downloaded successfully.") 
      do{ 
       //let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) 

      }catch { 
       print("Error with Json: \(error)") 
      } 

     } 
    } 
task.resume() 

が、私はエラーメッセージが表示されます: let httpResponse = response as! NSHTTPURLResponse

+0

をところで、スキーム(例えば、 'ます。http://'や 'https://での')を追加する必要に加えて、それが唯一だと仮定すると'http://'であれば、http://stackoverflow.com/questions/31254725/transport-security-has-blocked-a-cleartext-http/に記載されているように、ドメインをNSAppTransportSecurityに追加する必要があるかもしれません。 31254874#31254874 – Rob

答えて

0

問題:ライン上の任意の値 (lldb)をアンラップしながら、予想外にnilを見つけここ

は、私が今得たものです responsenilの場合(たとえば、URL文字列にがなかった場合など、リクエストが正常に発行されないようなエラーがあった場合)、強制的に NSHTTPURLResponseにキャストすると失敗します。スキーム接頭辞。しかし、これはさまざまな問題のいずれかで発生する可能性があるため、ネットワークエラーを正常に予期し、処理する必要があります)。ネットワークリクエストからの応答を処理するときは、最初に値が有効で非 nilであることを確認しない限り、強制的にアンラッピング/キャスティングを慎重に避ける必要があります。

私は示唆している:安全nil値をチェックするguardステートメントを使用して

  • datanilではないことを確認し、errornilであることを確認してからステータスコードを確認してください。だから、

、それがもたらすかもしれません:

let task = session.dataTaskWithRequest(urlRequest) { data, response, error in 
    guard data != nil && error == nil else { 
     print(error) 
     return 
    } 

    guard let httpResponse = response as? NSHTTPURLResponse where httpResponse.statusCode == 200 else { 
     print("status code not 200; \(response)") 
     return 
    } 

    print("Everyone is fine, file downloaded successfully.") 
    do { 
     let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) 
     print(json) 
    } catch let parseError { 
     print("Error with Json: \(parseError)") 
    } 
} 
task.resume() 
関連する問題