我正在关注http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial上有关多线程的教程。在本教程中,使用了ASIHTTPRequest,我发现AFNetworking现在已经成为标准。
我正在尝试使用此块下载一个zip文件:
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:sourceURL];
[request setCompletionBlock:^{
NSLog(@"Zip file downloaded.");
NSData *data = [request responseData];
[self processZip:data sourceURL:sourceURL];
}];
我将如何在AFNetworking中做到这一点?我需要使用类似的东西吗?
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
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];
在本教程中,我需要以NSData的形式下载,而在AFNetworking中,它正在使用NSURlResponse。
关于此的任何指示都是很棒的。谢谢 :)
最佳答案
我会认真去看看关于NSURLSession的Apple文档。在NSURLSession之前,使用NSURLConnection配置一个简单的上载/下载任务有点麻烦(至少可以这么说),因此AFNetworking变得非常流行……理所应当。
但是NSURLSession已修复了大部分问题,总的来说,相对于第三方了解真实的API是一个好主意(并且不要无视AFNetworking)。
NSURLSession的学习曲线降低了很多,以至于它不比学习AFNetworking差很多……至少是恕我直言。
为了更具体地说明上述问题,我相信您只需用等效的NSURLSessionManager调用替换上述AFURLSessionManager调用即可。
关于ios - 从ASIHTTPRequest到AFNetworking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30693178/