1

DetailViewControllerUIImageView, UIWebView 및 약간 UILabel을 포함하는 일반적인 "드릴 다운"스타일 앱이 있습니다. 문제는 imageView이로드하는 데 시간이 오래 걸리는 것입니다. 그것은 잠시 동안 흰색 (배경색)이며, 마침내 3-5 초 후에로드됩니다 (아마 다운로드에 걸리는 시간).UIImage imageWithData에 몇 분이 걸립니다.

코드는 다음과 같습니다

- (void)loadSummary { 
    self.dogFood = [[IKFetcher sharedFetcher] fetchDogFoodInfoForId:self.dogFoodId]; 
    self.dogFoodAnalysisArray = [[IKFetcher sharedFetcher] fetchDogFoodAnalysisArrayForId:self.dogFoodId]; 
    self.dogFoodRating = [[IKFetcher sharedFetcher] getAvgDogFoodRatingForId:self.dogFoodId]; 
    if ([self.dogFood.dfImageUrl length] != 0) { 
     self.dogFoodImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:self.dogFood.dfImageUrl]]]; 
    } 
} 

loadSummary에 대한 호출이 dispatch_async 전화에 싸여있다.

이미지를 다운로드 할 때까지 앱을 기다리려면 어떻게해야합니까?

답변

8

dataWithContentsOfURL에 원격 URL을 지정하는 것이 문제입니다. 다운로드에 시간이 걸리며 절대 도착하지 않을 수도 있습니다. 위험하다. 대신 자리 표시자를 표시하고 NSURLConnection을 사용하여 백그라운드에서 실제 이미지를 다운로드하십시오. 그것이 이미지를 가지고있을 때 델리게이트를 호출 할 것이고 당신은 그것을 즉시 디스플레이 할 수 있습니다.

+0

나를 용서해주십시오. 그러나 당신이 묘사 한 코드 또는 의사 코드를 제공 할 수 있습니까? 그것은'NSURLConnection' 동기식이어야합니까? –

+1

아니, 그 모든 목적을 이길 것입니다. - Apple은 NSURLConnection의 사용을 시연하는 좋은 코드를 가지고 있습니다. 또는 여기에서 백그라운드 다운로더 예제를 얻으실 수 있습니다 : https://github.com/mattneub/Programming-iOS-4-Book-Examples/tree/master/p754p772downloader – matt

+1

SDWebImage를 쉽게보십시오. HTTP를 통해 이미지를 백그라운드로 다운로드하기위한 드롭 인. –

1

나는

SDWebImage 그래서 당신이 그것을 직접 구현할 필요가 없습니다 건의 할 것입니다.

관련 문제