2016-07-02 3 views
1

UIImage не появляется из NSURL - вождение меня гайки. Это так основа, но пока не появится. Я знаю, что URL-адрес хорош, потому что, если я перейду к нему прямо в Интернете, он подтянет изображение. Я уверен, что мне не хватает чего-то глупого, но любая помощь приветствуется, спасибо!UIImage не появляется из NSURL

UIImageView *test = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
NSURL *url = [[NSURL alloc] initWithString:@"http://is5.mzstatic.com/image/thumb/Music/v4/0b/9c/d2/0b9cd2e7-6e76-8912-0357-14780cc2616a/source/100x100bb.jpg"]; 
NSData *data = [[NSData alloc] initWithContentsOfURL:url]; 
[test setImage:[UIImage imageWithData:data]]; 
[self.view addSubview:test]; 
[test setCenter:self.view.center]; 
+0

Это 'data' nil? Является ли '[UIImage imageWithData: data]' nil? – Larme

+0

код полностью верный. Просто скопируйте код в мой проект, и изображение будет отображаться без каких-либо проблем. –

+0

Изображение Goog, кстати. –

ответ

-1

Вы можете использовать SDWebImage, чтобы получить изображение:

#Import "UIImageView+WebCache.h"` 
[yourImageView SD_setImageWithURL:imageUrl withPlaceHolder:thumbImage];` 
0

Проверить построчно и изменения кода

UIImageView *test = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; 
NSURL *url = [NSURL URLWithString:@"http://is5.mzstatic.com/image/thumb/Music/v4/0b/9c/d2/0b9cd2e7-6e76-8912-0357-14780cc2616a/source/100x100bb.jpg"]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
UIImage *img = [[UIImage alloc] initWithData:data]; 
[test setImage:[UIImage imageWithData:data]]; 
[self.view addSubview:test]; 
[test setCenter:self.view.center]; 
+0

Данные не нулевые, изображение не равно null, ничего не равно NULL. Единственная проблема в том, что она просто не появляется. Я проверил проверки недействительности на каждом уровне, NSLogs на каждом уровне, точки останова ... все попадается, все работает - пока я не запустил его. –

+0

вы получаете изображение в изображении? –

0

Никогда не используйте dataWithContentsOfURL принести не локальный URL. Он предназначен для загрузки данных из файлов, а не сетевых адресов. Хотя он будет загружать данные из сетевых URL-адресов, он делает это синхронно в текущем потоке, и если вы работаете с объектами UIView, это означает, что это находится в основном потоке.

Если вы делаете это так, как вы пытаетесь сделать это выше, ваше приложение будет отклонено из App Store с почти 100% уверенностью, потому что в медленной сети загрузка изображения будет блокироваться достаточно долго, чтобы iOS убить приложение прямо для блокировки основного потока слишком долго.

Чтобы сделать запрос к сети, вы должны использовать NSURLSession (или NSURLConnection если вы пытаетесь поддерживать обратную совместимость с прошивкой 6 и выше), чтобы получить изображение, а затем, когда запрос по завершению загрузки, создать UIImage с этими данными, а затем вызовите setImage на уже отображаемом UIImageView (который должен показывать какую-то иконку «загрузка» до этой точки).

Возможно, было бы проще использовать одну из многих сторонних сетевых библиотек, которые предоставляют классы специально для того, чтобы сделать загрузку сетевого изображения менее болезненной.

Сказав это, я не понимаю, почему ваш существующий код ничего не показывает (при условии, что сервер отвечает достаточно быстро), если у вас нет проблемы с границами или с ограничениями автоопределения, из-за которых само изображение не должно быть видимый или подлежащий обрезанию.

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

  • Нет связанных вопросов^_^