2017-01-31 3 views
-1

다운로드 한 이미지를 tableView 셀의 imageViews에 추가하려고합니다. 다운로드 된 이미지에는 "기사"라는 배열의 URL이 있습니다. cellForRowAtIndexPath 방법에서는imageView에서 선택적 값의 래핑을 수행하는 동안 예기치 않게 nil이 발견되었습니다.

 let urlRequest = URLRequest(url: URL(string: url)!) 

     let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in 
      if error != nil { 
       print("error") 
       return 
      } 
      DispatchQueue.main.async { 
       self.image = UIImage(data: data!) 
      } 
     } 
     task.resume() 
    } 
} 

이어서 : I 배열에 기억 된 URL에 따라 영상을 다운로드하는 기능을 작성한

그러나

var imageData = self.articles?[indexPath.item].imageUrl 

    cell.imgView.downloadImage(from: imageData!) 

이 나에게 오류를 범 : "선택 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다"라는 줄에 :

cell.imgView.downloadImage(from: imageData!) 

이 문제를 어떻게 해결합니까?

+3

느낌표가 있으면 충돌이 발생할 수 있습니다. 뭔가 '무'입니다. 선택 사항을 안전하게 다루는 법을 배우십시오. 언어의 필수 부분입니다. – vadian

+0

downloadImage 메소드에는 첫 번째 블록 코드가 포함되어 있습니까? –

답변

0

다운로드 코드가있는 위치와 실제로 소요되는 시간에 따라 tableView를 표시하려고 할 때 이미지를로드하지 않았을 가능성이 큽니다.

당신은! = 전무는 다음 다운로드의 폐쇄에 추가,이 경우에만 이미지를 사용하려면 cellForRowAtIndexPath에 체크를 둘 필요가 tableView.reloadData() 모든

+0

고마워,이 완벽하게 작동했습니다 :) –

+0

쿨. 비동기 처리가 어려울 수 있습니다! – Russell

+0

당신이 대답을 좋아한다면, 그것을 받아주십시오 ... – Russell

0

먼저 나에게 기사 배열의 모든 URL을 알려주세요 유효하거나 없는지 또는 빈 URL이 있는지 여부. 은 더욱 더 당신은 당신이 데이터에서 이미지를 얻을하려고 데이터가 전무있을 때

let urlRequest = URLRequest(url: URL(string: url)!) 

     let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in 
      if error != nil { 
       print("error") 
       return 
      } 
      DispatchQueue.main.async { 

       if let _image = UIImage(data: data!) { 
       self.image = UIImage(data: data!) 
       } 

      } 
     } 
     task.resume() 
    } 

기본적으로 당신의 오류가 발생하는 파일 다운로드 방법 업데이트하여 오류를 해결할 수 있습니다. 그래서 If-let을 추가하여 오류를 해결할 수 있습니다.

관련 문제