1

У меня типичное приложение стиля «сверло» с DetailViewController, которое включает в себя UIImageView, 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 так что вам не нужно реализовать его самостоятельно.

Смежные вопросы