使用SDWebImage下载图片,错误-999(或)SDWebImageErrorDomain Code=0 "下载的图片有0像素
Download image using SDWebImage, error -999 (or) SDWebImageErrorDomain Code=0 "Downloaded image has 0 pixels
我无法使用 SDWebImage 4.4.5 版本下载 Objective c 中的图像。我尝试了以下方法,但没有任何效果。
尝试 1:
[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
}];
尝试 2:
[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { if(image != nil){
self.thumbnailImageView.image = image;
} else {
NSLog(@"Photo Not Available, fetch");
[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if(image != nil) { NSLog(@"Lo Res Image Loaded by %ld from '%@'", (long)cacheType, imageURL);
self.thumbnailImageView.image = image;
} else {
self.thumbnailImageView.image = nil;
} }];
} }];
尝试 3:
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDownloaderUseNSURLCache progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
}];
尝试 4:
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager loadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDelayPlaceholder progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
}];
尝试 5:
SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader;
[manager setValue:@"application/vnd.learning.events.v1+json" forHTTPHeaderField:@"Accept"];
[manager setValue:@"en-US" forHTTPHeaderField:@"Accept-Language"];
[manager setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
//[manager setValue:savedEmail forHTTPHeaderField:@"Email"];
[manager setValue:savedToken forHTTPHeaderField:@"Authorization"];
[manager downloadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDownloaderHighPriority progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
self.thumbnailImageView.image = image;
}];
在上述所有情况下,都会出现以下错误:
Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615, NSErrorFailingURLKey=https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <92586538-B07D-46FB-8694-3B29AA3F0CB4>.<7>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <92586538-B07D-46FB-8694-3B29AA3F0CB4>.<7>, NSLocalizedDescription=cancelled}
之前我们使用的是v3.5.4版本,可以通过以下代码下载图片。效果不错。
[self.thumbnailImageView setImageWithURL:[NSURL URLWithString:thumbnailURLString]
placeholderImage:nil
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
if (image != nil){
self.thumbnailImageView.image = [self imageResizingToAspetRatio:image];
}
}];
如果有任何错误或建议,请告诉我。
更新 1:
尝试使用 post man 下载图像。请检查图像。
在我升级到 SDWebImage v4.4.5 后,相同的图像 URL 在 SDWebImage v3.5.4 上工作,它没有提供图像。
我是否缺少任何配置?还安装了 pod 'SDWebImage/WebP',在构建设置 -> 预处理器宏中添加了 SD_WEBP=1。
Error: Error Domain=SDWebImageErrorDomain Code=0 "Downloaded image has 0 pixels" UserInfo={NSLocalizedDescription=Downloaded image has 0 pixels}
http://testingurl.net/api/Image?ActionFlagId=20&id=864
授权:
邮箱:kkk1@ler.com ,
代币:A-BE3D-WER3-847F-ER6YG5678G
首先,更新 pod 并尝试 SDWebImage pod 版本 3.8.2。
第二件事是检查你的形象URL。因为我用这个 pod 版本亲自测试了图像下载并且下载功能正常。
基本上,如果 URL 包含图像,SDWebImage 从任何 URL 下载它们都没有问题。
但在您的情况下,您已尝试从 JSON 获取图像。您的服务器 API returns 一个包含图像 base64String
的 JSON 对象。当您获得 JSON 响应时,您需要从 json 获得 base64String
,然后从 base64String
.
创建图像
您可以使用此方法将字符串解码为图像 Objective C
。
- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
return [UIImage imageWithData:data];
}
如果您遇到 SDWebImage 库的此类问题,您也可以使用其他支持 base64 字符串对象的库
我找到的最好的图书馆之一是“Kingfisher”
希望您喜欢本文,它将解决您的问题。
我遇到了同样的问题,我正在尝试使用 webP 图像。后来我意识到我需要将 webP 编码器添加到 SDImageCodersManager。像
SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared)
我是在 AppDelegate 中做的。
我无法使用 SDWebImage 4.4.5 版本下载 Objective c 中的图像。我尝试了以下方法,但没有任何效果。
尝试 1:
[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
}];
尝试 2:
[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { if(image != nil){
self.thumbnailImageView.image = image;
} else {
NSLog(@"Photo Not Available, fetch");
[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if(image != nil) { NSLog(@"Lo Res Image Loaded by %ld from '%@'", (long)cacheType, imageURL);
self.thumbnailImageView.image = image;
} else {
self.thumbnailImageView.image = nil;
} }];
} }];
尝试 3:
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDownloaderUseNSURLCache progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
}];
尝试 4:
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager loadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDelayPlaceholder progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {
}];
尝试 5:
SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader;
[manager setValue:@"application/vnd.learning.events.v1+json" forHTTPHeaderField:@"Accept"];
[manager setValue:@"en-US" forHTTPHeaderField:@"Accept-Language"];
[manager setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
//[manager setValue:savedEmail forHTTPHeaderField:@"Email"];
[manager setValue:savedToken forHTTPHeaderField:@"Authorization"];
[manager downloadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDownloaderHighPriority progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
self.thumbnailImageView.image = image;
}];
在上述所有情况下,都会出现以下错误:
Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615, NSErrorFailingURLKey=https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <92586538-B07D-46FB-8694-3B29AA3F0CB4>.<7>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <92586538-B07D-46FB-8694-3B29AA3F0CB4>.<7>, NSLocalizedDescription=cancelled}
之前我们使用的是v3.5.4版本,可以通过以下代码下载图片。效果不错。
[self.thumbnailImageView setImageWithURL:[NSURL URLWithString:thumbnailURLString]
placeholderImage:nil
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
if (image != nil){
self.thumbnailImageView.image = [self imageResizingToAspetRatio:image];
}
}];
如果有任何错误或建议,请告诉我。
更新 1: 尝试使用 post man 下载图像。请检查图像。 在我升级到 SDWebImage v4.4.5 后,相同的图像 URL 在 SDWebImage v3.5.4 上工作,它没有提供图像。
我是否缺少任何配置?还安装了 pod 'SDWebImage/WebP',在构建设置 -> 预处理器宏中添加了 SD_WEBP=1。
Error: Error Domain=SDWebImageErrorDomain Code=0 "Downloaded image has 0 pixels" UserInfo={NSLocalizedDescription=Downloaded image has 0 pixels}
http://testingurl.net/api/Image?ActionFlagId=20&id=864
授权: 邮箱:kkk1@ler.com , 代币:A-BE3D-WER3-847F-ER6YG5678G
首先,更新 pod 并尝试 SDWebImage pod 版本 3.8.2。
第二件事是检查你的形象URL。因为我用这个 pod 版本亲自测试了图像下载并且下载功能正常。
基本上,如果 URL 包含图像,SDWebImage 从任何 URL 下载它们都没有问题。
但在您的情况下,您已尝试从 JSON 获取图像。您的服务器 API returns 一个包含图像 base64String
的 JSON 对象。当您获得 JSON 响应时,您需要从 json 获得 base64String
,然后从 base64String
.
您可以使用此方法将字符串解码为图像 Objective C
。
- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
return [UIImage imageWithData:data];
}
如果您遇到 SDWebImage 库的此类问题,您也可以使用其他支持 base64 字符串对象的库
我找到的最好的图书馆之一是“Kingfisher”
希望您喜欢本文,它将解决您的问题。
我遇到了同样的问题,我正在尝试使用 webP 图像。后来我意识到我需要将 webP 编码器添加到 SDImageCodersManager。像
SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared)
我是在 AppDelegate 中做的。