2013-10-10 5 views
2

J'ai récemment mis à jour AFNetworking 2.0. La documentation dit qu'il est compatible avec iOS6.0 +. Je construis une application iOS 6.0, lorsque j'essaie d'implémenter une méthode de téléchargement (images et vidéos). L'exemple utiliserTélécharger le fichier en utilisant AFNetworking sur iOS 6

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

Cependant, je suis un « Utilisation d'identificateur non déclaré « AFURLSessionManager » » erreur. Et j'ai découvert que AFURLSessionManager utilise une classe qui n'est disponible que depuis iOS7. Je me demandais juste, qui pourrais-je télécharger dans iOS6 en utilisant AFNetworking?

En outre, y a-t-il moyen de voir les progrès du téléchargement?

Merci

Répondre

2

Comme vous le dites AFURLSessionManager est seulement disponible en iOS 7 (est soutenu par NSURLSession), vous devez donc utiliser les classes basées NSURLConnection dans AFNetworking 2.0 (AFHTTPRequestOperationManager, AFHTTPRequestOperation, etc.).

+1

OK, a trouvé cette ... Donc, pour résumer: afin de soutenir les nouvelles API NSURLSession ainsi que l'ancienne, mais non pas désapprouvé et -still-utile NSURLConnection, les composants de base de AFNetworking 2.0 sont répartis entre l'opération de requête et les tâches de session. AFHTTPRequestOperationManager et AFHTTPSessionManager offrent des fonctionnalités similaires, avec des interfaces presque interchangeables qui peuvent être permutées assez facilement, le cas échéant (comme le portage entre iOS 6 et 7). – hook38

+1

Correct AFAIK ... – e1985

+0

Avez-vous un exemple ou un didacticiel pour télécharger des fichiers à l'aide de AFHTTPRequestOperationManager? – hook38

4

Vous pouvez utiliser la classe AFHTTPRequestOperation pour effectuer un téléchargement de fichier sur iOS 6. Vous avez juste besoin essentiellement de définir outputStream propriété de l'opération pour stocker le fichier et la propriété downloadProgressBlock pour suivre les progrès.

La méthode des os nus ci-dessous est déclarée dans une classe qui est une sous-classe de AFHTTPRequestOperationManager. Lorsque j'ai initialisé une instance de cette classe, j'ai configuré la propriété 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

essayer ...

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]; 
}]; 
Questions connexes