Objective c 从http更改为https后,SDWebImage未下载映像
我的项目中有一个带有图像的表 图像url以http开头: 在tableView cellForRowAtIndexPath中,我使用此方法下载每个单元格的图像Objective c 从http更改为https后,SDWebImage未下载映像,objective-c,sdwebimage,Objective C,Sdwebimage,我的项目中有一个带有图像的表 图像url以http开头: 在tableView cellForRowAtIndexPath中,我使用此方法下载每个单元格的图像 - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlo
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock {
[self sd_cancelCurrentImageLoad];
objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
if (!(options & SDWebImageDelayPlaceholder)) {
dispatch_main_async_safe(^{
self.image = placeholder;
});
}
if (url) {
// check if activityView is enabled or not
if ([self showActivityIndicatorView]) {
[self addActivityIndicator];
}
__weak __typeof(self)wself = self;
id <SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadImageWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
[wself removeActivityIndicator];
if (!wself) return;
dispatch_main_sync_safe(^{
if (!wself) return;
if (image && (options & SDWebImageAvoidAutoSetImage) && completedBlock)
{
completedBlock(image, error, cacheType, url);
return;
}
else if (image) {
wself.image = image;
[wself setNeedsLayout];
} else {
if ((options & SDWebImageDelayPlaceholder)) {
wself.image = placeholder;
[wself setNeedsLayout];
}
}
if (completedBlock && finished) {
completedBlock(image, error, cacheType, url);
}
});
}];
[self sd_setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"];
} else {
dispatch_main_async_safe(^{
[self removeActivityIndicator];
if (completedBlock) {
NSError *error = [NSError errorWithDomain:SDWebImageErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey : @"Trying to load a nil url"}];
completedBlock(nil, error, SDImageCacheTypeNone, url);
}
});
}
}
-(void)sd_setImageWithURL:(NSURL*)url占位符图像:(UIImage*)占位符选项:(SDWebImageOptions)选项进度:(SDWebImageDownloaderProgressBlock)进度块已完成:(SDWebImageCompletionBlock)已完成块{
[self sd_cancelCurrentImageLoad];
objc_setAssociatedObject(self,&imageURLKey,url,objc_ASSOCIATION_RETAIN_NONATOMIC);
if(!(选项和SDWebImageDelayPlaceholder)){
调度\u主\u异步\u安全(^{
self.image=占位符;
});
}
如果(url){
//检查是否启用了activityView
if([自显示活动指示灯视图]){
[自添加活动指示器];
}
__弱(自我)类型wself=自我;
id操作=[SDWebImageManager.sharedManager下载ImageWithURL:url选项:选项进度:progressBlock完成:^(UIImage*image,NSError*error,SDImageCacheType cacheType,BOOL finished,NSURL*imageURL){
[wself removeActivityIndicator];
如果(!wself)返回;
调度主同步安全(^{
如果(!wself)返回;
if(图像和(选项和SDWebImageAvoidAutoSetImage)和完成块)
{
completedBlock(图像、错误、缓存类型、url);
返回;
}
else if(图像){
wself.image=图像;
[wself setNeedsLayout];
}否则{
if((选项和SDWebImageDelayPlaceholder)){
wself.image=占位符;
[wself setNeedsLayout];
}
}
if(已完成的块和已完成的(&F){
completedBlock(图像、错误、缓存类型、url);
}
});
}];
[self-sd_setImageLoadOperation:operation forKey:@“UIImageViewImageLoad”];
}否则{
调度\u主\u异步\u安全(^{
[自主活动指示器];
if(完成块){
NSError*error=[NSErrorWithDomain:SDWebImageErrorDomain代码:-1用户信息:@{NSLocalizedDescriptionKey:@“正在尝试加载一个无url”}];
completedBlock(无,错误,SDImageCacheTypeNone,url);
}
});
}
}
在普利斯特,我有这个
NSAllowsArbitraryLoads
当我从Plist文件中删除NSAllowsArbitraryLoads时,问题就开始了
并将url改为https:一些图片下载,一些不下载
有什么问题吗?在我的应用程序(一个旧的)中,我有一些图片要下载。
当我尝试使用SDWebImage执行此操作时,没有结果
我的解决方案是将我的图像url复制到safari,然后获取直接url并使用它
我认为问题在于重定向url,当存在重定向url时,SDWebImage无法下载此图像
试试看,让我知道我自己是否有正确的答案:)