2014-12-10 4 views
-1

JSON 문서를 구문 분석하고 해당 정보를 UICollectionView에 입력하려고합니다. 나는 UICollectionViewDelegate/Flowlayout/DataSource 등에서 작업하기 전에 파싱을 테스트했지만 정확한 정보가 반환되었지만 이제는이 오류가 발생합니다. 내가 여기서 뭘 잘못하고 있는거야?치명적인 오류 : 예기치 않게 찾지 못했습니다. 선택 값을 래핑하지 않았습니다.

class ViewModel { 

let urlString = "https://s3.amazonaws.com/nxtapnxtap/clubsinfo.json" 

var clubNames = [String]() 
var smImg = [UIImage]() 
var lgImg = [String]() 

func fetchItems(success:() ->()) { 
    let url = NSURL(string: urlString) 
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
    let task = session.dataTaskWithURL(url!) { (data, response, error) in 
     var jsonError: NSError? 
    let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &jsonError) as NSDictionary // Error here --> fatal error: unexpectedly found nil while unwrapping an Optional value 

     if let unwrappedError = jsonError { 
      println("jsonError: \(unwrappedError)") 
     } else { 
      self.clubNames = json.valueForKeyPath("entry.name.label") as [String] 
      self.smImg = json.valueForKeyPath("entry.smimg.label") as [UIImage] 
      self.lgImg = json.valueForKeyPath("entry.lgimg.label") as [String] 
      success() 
     } 
    } 
    task.resume() 
} 

답변

2

JSONObjectWithData에서 돌아 오는 개체는 nil입니다. NSDictionary로 강제 변환하려고합니다. 당신은 당신이 행동하기 전에가있는 NSDictionary에 캐스트 할 수 있는지 확인해야합니다 당신의 도움에 bjtitus에 대한

func fetchItems(success:() ->()) { 
    let url = NSURL(string: urlString) 
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration()) 
    let task = session.dataTaskWithURL(url!) { (data, response, error) in 
     var jsonError: NSError? 
     if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &jsonError) as? NSDictionary { 
      self.clubNames = json.valueForKeyPath("entry.name.label") as [String] 
      self.smImg = json.valueForKeyPath("entry.smimg.label") as [UIImage] 
      self.lgImg = json.valueForKeyPath("entry.lgimg.label") as [String] 
      success() 
     } else if let unwrappedError = jsonError { 
      println("jsonError: \(unwrappedError)") 
     } 
    } 

    task.resume() 
} 
+0

감사합니다 -이 이전 오류를 제거했고, 지금은 (어떤 값)을 받고하지하고 오류가 있음을 의미 반환되는 데이터는 nil입니다. 내가 이해하지 못하는 것은 데이터가 왜 돌아 오지 않는지입니다. json.valueForKeyPath가 잘못 작성 되었습니까? 이전에이 스 니펫이 작동 했으므로 혼란 스럽습니다 (반환 된 데이터를 인쇄 할 수있었습니다). 내 코드의 다른 것이이 스 니펫을 방해 할 가능성이 있습니까? 여기 – SamYoungNY

+0

는 JSON 문서의 예입니다 : { "항목은": [ 는 { "이름": { "라벨": "Samplename" } – SamYoungNY

+0

즉 전체 JSON 문서 인 경우는, 확실히 유효하지 않습니다 . 유효성 검사기로 json을 확인하십시오. http://jsonlint.com – bjtitus

관련 문제