2014-11-30 2 views
-3
@IBOutlet weak var weather: UILabel! 
@IBOutlet weak var city: UITextField! 
@IBAction func button(sender: AnyObject) { 
    let urlpath = "api.worldweatheronline.com/free/v2/weather.ashx?q=\(city.text)&format=json&num_of_days=5&key=c7fc4c9444ae2ddcee02a0893d5f0" 
    let url = NSURL(string: urlpath) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithURL(url, completionHandler: { (data, response, error) -> Void in 
     if (error != nil) { 
      self.weather.text="error" 


     }else{ 

      var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary 
      println(jsonResult) 

     } 


    }) 
    task.resume() 





} 

애플리케이션을 실행할 때 콘솔에 오류가 발생합니다. 내가 믿는 데이터를 올바르게 직렬화하고 있지만 JSON 직렬화 된 데이터를 NSDictionary에 표시 할 수 없습니다. 콘솔에 사전을 인쇄하려고 시도했지만 여전히 오류로 표시됩니다. 여기서 뭐가 잘못 됐는지 이해하도록 도와주세요.JSON에서 Swift의 NSDictionary로 데이터를 다운로드하는 중 오류가 발생했습니다.

+0

여기에는 하나의 심각한 문제가 있습니다 :'error : nil)' –

+0

"콘솔에 오류가 있습니다"- 그건 쓸모없는 문장입니다. 오류를 정확하게 인용해야합니다. JSON 데이터를 사전에 가져 오려면 사전에 역 직렬화해야합니다. –

+0

그리고 JSON은 어떻게 생겼습니까? –

답변

0

이런 식으로 시도해보십시오.

func fetchWeatherData(latLong: String, completion: WeatherDataCompletionBlock) { 

    let baseUrl = NSURL(string: "http://api.worldweatheronline.com/free/v2/weather.ashx?q=\(city.text)&format=json&num_of_days=5&key=c7fc4c9444ae2ddcee02a0893d5f0") 
    let request = NSURLRequest(URL: baseUrl!) 
    println(request) 
    let task = session.dataTaskWithRequest(request) {[unowned self] data, response, error in 
     if error == nil { 
      var jsonError: NSError? 
      if (jsonError == nil) { 
       let weatherDictionary = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.AllowFragments, error: &jsonError) as NSDictionary 

       let data = WeatherData(weatherDictionary: weatherDictionary) 
       completion(data: data, error: nil) 
      } else { 
       completion(data: nil, error: jsonError) 
      } 
     } else { 
      completion(data: nil, error: error) 
     } 
    } 

    task.resume() 
} 
관련 문제