我正在使用AFNetworking下载mp3文件。下载发生在特定的ViewController中。由于mp3文件非常大,完成下载需要几分钟。问题是,当我去另一个ViewController时,下载停止,我必须继续下载ViewController并等待下载完成。这对用户来说是令人沮丧的!即使下载ViewController被解除,有没有办法让下载进行? 这是我用于下载的代码:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sample.com/samplefile.mp3"]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSString *mp3Name = @"sample.mp3";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:mp3Name];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
答案 0 :(得分:0)
您可以创建单身
+(id)sharedInstance
{
static dispatch_once_t pred;
static MyClass *sharedInstance = nil;
dispatch_once(&pred, ^{
sharedInstance = [[MyClass alloc] init];
});
return sharedInstance;
}
并在其中实施下载操作。
如果您在阅读本文iOS design patterns
之前未使用单身人士还阅读有关raywenderlich的这篇文章。它将让您了解如何正确组织Web服务工作
答案 1 :(得分:0)
实现您想要的最简单方法是在ApplicationDelegate中放入一个启动下载的方法,并在下载完成后通知您的视图控制器。所以只需将代码移到applicationDelegate即可。
请注意:我不认为这是最好的方法,在一个单独的类中处理网络流量要好得多,但最简单的方法是使用(已经建立的)Singleton,这是你的ApplicationDelegate。