2016-03-15 49 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'的共享實例。 –

相關問題