UIImage没有出现在NSURL

时间:2016-07-02 10:07:49

标签: objective-c uiimageview uiimage nsdata nsurl

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];

3 个答案:

答案 0 :(得分:1)

代码正确但您需要启用传输安全性。请参阅此链接Transport security has blocked a cleartext HTTP

答案 1 :(得分: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];

答案 2 :(得分:0)

永远不要使用dataWithContentsOfURL来获取非本地URL。它旨在从文件而不是网络URL加载数据。虽然它将从网络URL加载数据,但它在当前线程上同步执行,如果您正在使用UIView对象,则表示这是在主线程上。

如果您按照上述方式执行此操作,您的应用程序将几乎100%确定地从App Store中被拒绝,因为在网络速度较慢的情况下,图像加载会阻塞足够长的时间以便iOS杀死你的应用程序完全阻止主线程太久了。

要发出网络请求,必须使用NSURLSession(或NSURLConnection,如果您尝试保持与iOS 6及更早版本的向后兼容性)以检索图像,然后在请求完成加载时,创建一个包含该数据的UIImage,然后在已经显示的setImage上调用UIImageView(应显示某种“加载”图标直到那一点)。

使用许多第三方网络库中的一个可能更容易,这些库提供的类专门用于减轻网络图像加载的痛苦。

话虽如此,我不明白为什么你现有的代码没有显示任何东西(假设服务器响应足够快),除非你遇到边界问题或自动布局限制导致图像视图本身不可见或被裁剪。