【问题标题】:How to resume data download in other views?如何在其他视图中恢复数据下载?
【发布时间】:2014-02-15 16:06:26
【问题描述】:

我正在使用 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);
}];

【问题讨论】:

    标签: ios iphone nsurlconnection afnetworking nsoutputstream


    【解决方案1】:

    实现您想要的最简单的方法是在 ApplicationDelegate 中放置一个方法,该方法开始下载并在下载完成后通知您的视图控制器。因此,只需将您的代码移动到 applicationDelegate。

    请注意:我认为这不是最好的方法,最好在一个单独的类中处理网络流量,但最简单的方法是使用(已经建立的)单例应用程序委托。

    【讨论】:

      【解决方案2】:

      你可以创建单例

       +(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 服务的工作

      AFNetworking crash course

      NSOperations

      【讨论】:

      • 感谢罗马!我从来没有使用过单音,所以我要去全能的 raywenderlich!如果我得到任何东西,我会更新我的答案。
      • 顺便问一下,我是否使用了正确的下载方法?请注意,我想在后台(异步)下载文件,以便用户可以在文件下载时浏览应用程序。
      • 我可以从您发布的代码中看到 - 是的))AFNetworking 是用于处理 Web 服务的好库。 AFNetworking 正在使用在后台线程中执行的 NSOperations
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2013-05-28
      • 2012-04-20
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多