2016-03-15 50 views
3

我试图下载使用AFNetworking 3.0图像这样的方式:AFNetworking 3.0不能下载图像

- (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; 
} 

,每次我收到此错误:

*** Assertion failure in -[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:], /Users/.../AFNetworking/AFURLRequestSerialization.m:353

我可以”弄清楚我做错了什么。发生了什么错误?而不是URLHostAllowedCharacterSet

+2

从错误日志看来,'链接'似乎是空的。 –

+2

'stringByAddingPercentEncodingWithAllowedCharacters:'将加密包含'http://'的URL,这将成为'http%3A%2F%2F',并且不再是有效的URL。 – rckoenes

+0

尝试添加异常断点以获取错误所在的确切行。 –

回答

0

使用URLFragmentAllowedCharacterSet你可以使用:

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

1

图片下载已重构遵循从AlamofireImage架构与AFNetworking 3.0新AFImageDownloader类。

2

我很抱歉花费你的时间,伙计。我已经注意到从链接数组元素夫妇是我所面临的答案内容类型相关的另一个问题空,加入后检查条件:

“不可接受的内容类型:text/plain的”

“错误域= NSCocoaErrorDomain代码= 3840 “的操作不能使用AFNetworking”

后,我已经试过几个变种完成:

manager.responseSerializer = [AFImageResponseSerializer serializer]; 
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer];”是正确的。另外请记住,您正在使用异步进程和管理员获取答案之后函数返回值。谢谢你们!

1

可以使用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); 
    }]; 

希望这件事有助于

3

如果使用AFNetworking 3.0,你需要添加头文件AFImageDownloader.h

#import <AFNetworking/AFImageDownloader.h> 

并使用方法downloadImageForURLRequest

NSString* stringVideo = [NSString stringWithFormat:@"https:%@", your link]; 
AFImageDownloader* dow = [[AFImageDownloader alloc] init]; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: stringVideo]]; 
[dow downloadImageForURLRequest:request success:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, UIImage * _Nonnull responseObject) { 
    NSLog(@"Succes downloud image"); 
} failure:^(NSURLRequest * _Nonnull request, NSHTTPURLResponse * _Nullable response, NSError * _Nonnull error) { 
    NSLog(@"Error downloud image"); 
}]; 
+1

IMO最好使用'[AFImageDownloader defaultInstance]'来使用'AFImageDownloader'的共享实例。 –

相关问题