반응형
#부스트코스 #iOS프로그래밍
부스트코스 프로젝트 마지막! BoxOffice는 서버의 API를 통해 영화 정보를 요청하고 가져옵니다.
그 중 첫번째 탭의 Table의 영화 리스트를 가져오는 화면을 구현하고 있었습니당!
통신이 잘 되는 것을 분명 확인했는데..
처음에는 빈화면으로 떴다가 몇 초 기다려보니..!!
이제야 제대로 뜨네요..!!!!
그 이유는 바로
tableView의 reloadData를 백그라운드 스레드에서 호출을 해줬기 때문입니다.
옆에 보라색 안내 메세지가
"UITableView.reloadData()는 메인 스레드에서만 사용해야 한다."
고 친절하게 알려주고 있네요!
또 많은 양의 데이터를 한번에 받아오게 되면 이미지를 불러오는 데에 시간이 오래 소요될 수 있습니다.
1. 메인 스레드에서 테이블뷰 리로드 호출하기
MovieListService.shaed.getMovieList(orderType: orderType, completionHandler: { movieList in
self.movieList = movieList
// main thread
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
위와 같이 적어주면 뒤늦게 리로드되는 문제를 해결할 수 있습니다!
2. 이미지를 세팅하는 작업은 메인에서
이미지를 다운로드 받는 건 백그라운드에서 진행하고
이미지를 세팅하는 작업은 메인 스레드에서 처리해줍니다!
// thumbnail image
// imageview image 비워놓기
// cell.thumbImageView.image = nil
// background thread - download image
DispatchQueue.global().async {
guard let imageURL: URL = URL(string: movies?[indexPath.row].thumb ?? "") else { return }
guard let imageData: Data = try? Data(contentsOf: imageURL) else { return }
// main thread - setting image
DispatchQueue.main.async {
if let index: IndexPath = tableView.indexPath(for: cell) {
if index.row == indexPath.row {
cell.thumbImageView.image = UIImage(data: imageData)
}
}
}
}
감사합니다. :)
반응형
'All Categories > iOS & Swift' 카테고리의 다른 글
iOS 13+) Storyboard 없이 프로젝트 생성하기 (2) | 2021.02.15 |
---|---|
왜 프로토콜 변수 선언땐 let이 안될까? / weak와 unowned 의 차이 (0) | 2021.01.27 |
[부스트코스 PJT1] UIButton 다루기 (0) | 2019.08.14 |
Swift 5) UIView 에 UITapGestureRecognizer 추가하기 (0) | 2019.07.05 |
iOS) UITabBarController Setting: tab bar item image, text color (0) | 2019.07.04 |