Ios AF3.0网络可以';下载图片
我正在尝试使用AFNetworking 3.0下载图像,方法如下:Ios AF3.0网络可以';下载图片,ios,objective-c,http,uiimage,afnetworking-3,Ios,Objective C,Http,Uiimage,Afnetworking 3,我正在尝试使用AFNetworking 3.0下载图像,方法如下: - (UIImage *) loadImage:(NSString *) link { __block UIImage *image = [UIImage imageNamed:@"no_user_profile_pic.png"]; AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSeria
- (UIImage *) loadImage:(NSString *) link
{
__block UIImage *image = [UIImage imageNamed:@"no_user_profile_pic.png"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFImageResponseSerializer serializer];
[manager GET:[link stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]
parameters:nil
progress:nil
success:^(NSURLSessionTask *task, id responseObject) {
image = (UIImage *) responseObject;
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Load Image error - %@", [error description]);
}];
return image;
}
每次我遇到这个错误:
***-[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:,/Users/../AFNetworking/AFURLRequestSerialization.m:353中的断言失败
我不知道我做错了什么。发生了什么错误?使用
URLFragmentAllowedCharacterSet
而不是URLHostAllowedCharacterSet
您可以使用:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
图像下载已经进行了重构,以遵循AlamoFireImage3.0中新的
AFImageDownloader
类的架构。很抱歉占用您的时间,伙计们。我注意到链接数组中的两个元素是空的,在添加了检查条件之后,我遇到了与答案内容类型相关的另一个问题:
“不可接受的内容类型:文本/纯文本”
及
“错误域=NSCOCAERRORDOMAIN Code=3840”无法使用AFNetworking完成该操作”
在我尝试了几个变体之后:
manager.responseSerializer = [AFImageResponseSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
“
manager.responseSerializer=[AFHTTPResponseSerializer]代码>“是正确的。请记住,您使用的是异步进程和管理器,在函数返回值后获得答案。谢谢大家!您可以使用AFNetworking的直接方法下载映像
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:"YOUR URL OF IMAGE HERE"];
["YOUR IMAGEVIEW" setImageWithURLRequest:request placeholderImage:"YOUR PLACEHOLDER IMAGE" success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull image) {
"YOUR IMAGEVIEW".image = image;
} failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
希望这件事有帮助如果您使用AFNetworking 3.0,您需要添加头文件AFImageDownloader.h:
从错误日志来看,“链接”可能是空的。stringByAddingPercentEncodingWithAllowedCharacters:
将加密URL,包括http://
,这将成为http%3A%2F%2F
,并且不再有有效的URL。请尝试添加异常断点以获得错误所在的准确行。@Bharat Mod谢谢。在我看来,最好使用[AFImageDownloader defaultInstance]
来使用AFImageDownloader
的共享实例。
#import <AFNetworking/AFImageDownloader.h>