作为苹果将迫使我们启用2017年的ATS,我正在做一些调查工作,但对SDWebImage
类有一些疑问。
如果我使用下面的代码,则将成功加载图像
[self.myImageView sd_setImageWithURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/h%3D200/sign=1c3f18c4524e9258b93481eeac83d1d1/b7fd5266d0160924be0452bbd00735fae6cd3468.jpg"]];
但是,如果我在NSData
中使用该方法,则不会加载图像。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/h%3D200/sign=1c3f18c4524e9258b93481eeac83d1d1/b7fd5266d0160924be0452bbd00735fae6cd3468.jpg"]];
UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^{
self.myImageView.image = image;
});
});
SDWebImage
如何做?
确保您的info.plist文件中未设置" NSAllowsArbitraryLoads
"。
例如,当我将您的URL插入sdwebimage的演示应用程序(在他们的MasterViewController.m文件中)并关闭ATS例外时,我会在Xcode Console中获取" SDWebImage iOS Demo[6714:130852] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
"消息。
不太可能,但是,也许在加载故障的情况下,sdwebimage会查看nsurl方案,如果是 @ @ @" http:",它将其更改为 @ @" https:"?
NSString *absoluteString = url.absoluteString;
if ([absoluteString hasPrefix:@"http:"]) {
url = [NSURL URLWithString:[@"https:" stringByAppendingString:[absoluteString substringFromIndex:5]]];
}
可能会从缓存中获取图像,因为这是第一个位置SDWebimage检查,然后再将请求发送到URL。