2016-04-06 31 views
0

içinden nasıl alabilirim? Barkodu tarayan ve sunucudan bazı JSON verilerini almak için http dinlenme çağrısı kullanarak bir yöntem yazmaya çalışıyorum. Alamofire şimdi çalışmıyor ve birçok farklı yol denedim. önemli bir hatayla: JSON verilerini swift2.0, xcode7.3

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() 

bir hata mesajı alıyorum: let httpResponse = response as! NSHTTPURLResponse

+0

, ek olarak şemasını eklemek gerek için (örneğin 'http: //' veya 'https: //'), sadece var varsayarak http: // ', daha sonra http://stackoverflow.com/questions/31254725/transport-security-has-blocked-a-cleartext-http/ adresinde açıklandığı gibi alanınızı 'NSAppTransportSecurity' alanına eklemeniz gerekebilir. 31254874 # 31254874. – Rob

cevap

0

sorun: hattında bir Opsiyonel değerini (lldb) unwrapping ederken beklenmedik nil bulundu İşte

şimdi ne var ise NSHTTPURLResponse için zorlanmış yayın response nil ise başarısız olur (örneğin, URL dizesinin eksik olduğu durumda olduğu gibi, isteğin başarılı bir şekilde verilmesini engelleyen bir hata varsa, http:// şema öneki; Ancak bu, çeşitli sorunlardan herhangi biri için olabilir, dolayısıyla ağ hatalarını hassas bir şekilde tahmin etmeli ve ele almalıyız). Ağ isteklerinden gelen yanıtları işlerken, öncelikle değerin geçerli olduğunu ve nil numaralı telefon hattının geçerli olmadığını doğrulamadıkça, zorla açılmayı/dökülmeyi zorlamalıdır.

öneririm: güvenle nil değerleri denetlemek için guard ifadelerini kullanarak

  • ; data'un nil olmadığı ve error'un nil olduğunu kontrol etmeden önce durum kodlarını kontrol etmek için rahatsız etmeden önce; Yani

ki verim olabilir: Bu arada

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() 
İlgili konular