2013-10-10 2 views
2

최근에 AFNetworking 2.0으로 업데이트했습니다. 설명서에 따르면 iOS6.0 +와 호환됩니다. 저는 다운로드 방법 (이미지와 비디오 모두)을 구현하려고 할 때 iOS 6.0 앱을 제작하고 있습니다. 예제 사용iOS 6에서 AFNetworking을 사용하여 파일 다운로드

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 

그러나 "선언되지 않은 식별자 'AFURLSessionManager'사용 오류가 발생했습니다. 그리고 AFURLSessionManager가 iOS7에서만 사용할 수있는 클래스를 사용한다는 것을 알았습니다. 나는 궁금한데, 누가 AFNetworking을 사용하여 iOS6에서 다운로드 할 수 있습니까?

어쨌든 다운로드 진행률을 볼 수 있습니까? 당신이 AFURLSessionManager이 아이폰 OS 7 (NSURLSession의 지원을받습니다)에서만 사용할 수 있습니다 말하는 것처럼

답변

2

감사, 그래서 당신은 AFNetworking 2.0 (AFHTTPRequestOperationManager, AFHTTPRequestOperation 등)에 NSURLConnection 기반 클래스를 사용해야합니다.

+1

확인, ...이 발견 요약하자면 그래서 다음뿐만 아니라 새로운 NSURLSession API를 지원하기 위해 오래된하지만-비추천하지-및 AFNetworking 2.0의 핵심 구성 요소 인 NSURLConnection은 요청 작업과 세션 작업간에 분리되어 있습니다. AFHTTPRequestOperationManager와 AFHTTPSessionManager는 비슷한 기능을 제공하며 필요에 따라 (예 : iOS 6과 7 사이의 포팅과 같이) 쉽게 교체 할 수있는 거의 상호 교환 가능한 인터페이스를 제공합니다. – hook38

+1

올바른 AFAIK ... – e1985

+0

AFHTTPRequestOperationManager를 사용하여 파일을 다운로드하는 예제 또는 자습서가 있습니까? – hook38

4

당신은 당신은 기본적으로 그냥 파일 및 진행 상황을 모니터링 할 수있는 downloadProgressBlock 속성을 저장하는 작업의 outputStream 속성을 설정해야합니다 아이폰 OS 6. 파일 다운로드를 수행 할 AFHTTPRequestOperation 클래스를 사용할 수 있습니다.

아래의 베어 본 메서드는 AFHTTPRequestOperationManager의 하위 클래스 인 클래스에서 선언됩니다. 이 클래스의 인스턴스를 초기화 할 때 baseURL 속성을 설정했습니다.

- (AFHTTPRequestOperation *)downloadFileWithContentId:(NSString *)contentId destination:(NSString*)destinationPath { 

    NSString *relativeURLString = [NSString stringWithFormat:@"api/library/zipped/%@.zip", contentId]; 
    NSString *absoluteURLString = [[NSURL URLWithString:relativeURLString relativeToURL:self.baseURL] absoluteString]; 

    NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"GET" URLString:absoluteURLString parameters:nil]; 

    void (^successBlock)(AFHTTPRequestOperation *operation, id responseObject) = ^void(AFHTTPRequestOperation *operation, id responseObject) { 

    }; 

    void (^failureBlock)(AFHTTPRequestOperation *operation, NSError *error) = ^void(AFHTTPRequestOperation *operation, NSError *error) { 

    }; 

    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:successBlock failure:failureBlock]; 

    NSOutputStream *outputStream = [NSOutputStream outputStreamToFileAtPath:destinationPath append:NO]; 
    operation.outputStream = outputStream; 

    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 

    }]; 

    [self.operationQueue addOperation:operation]; 

    return operation; 
} 
2

이 시도 ...

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

AFHTTPRequestOperation *operation = [manager GET:urlString 
             parameters:nil 
             success:^(AFHTTPRequestOperation *operation, NSData *responseData) 
            { 
             [responseData writeToURL:someLocalURL atomically:YES]; 
            } 
             failure:^(AFHTTPRequestOperation *operation, NSError *error) 
            { 
             NSLog(@"Downloading error: %@", error); 
            }]; 

[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) 
{ 
    float downloadPercentage = (float)totalBytesRead/(float)(totalBytesExpectedToRead); 

    [someProgressView setProgress:downloadPercentage animated:YES]; 
}]; 
관련 문제