如何处理多个异步下载

时间:2011-09-28 12:47:55

标签: nsurlconnection

我最近将我的后台同步下载移动到视图控制器,并需要一些关于如何最好地处理它们的建议。我已经编写了所有代码来显示进度视图,但是您可能已经猜到它并不那么简单。这是它的工作原理。

用户看到每个数据库有两个entires的tableview。他们可以按下按钮下载数据库,下载开始时会触发异步URL连接等。这在某种程度上起作用,但并不那么简单。

这就是我想要的。

  1. 下载主更新网址(工作正常)
  2. 然后下载辅助网址。
  3. 然后将第一个URL内容应用于sqlite商店(为此编写的代码)
  4. 然后将第二个URL内容应用于sqlite商店(为此编写的代码)
  5. (一直向用户显示进度)

    当下载是同步的时候很简单,因为我只是等待他们完成以便关闭下一个活动但是当使用异步方法我正在努力让他们等待。步骤3取决于步骤1的精加工,步骤4取决于步骤2的精加工,整体成功依赖于所有精加工。步骤4需要等待第3步完成,否则数据库锁定将导致冲突。

    第二个复杂情况是,如果用户在下载第一个按钮时按下第二个按钮,那么如果第一个按钮在第一行访问数据库的同时执行则会发生冲突。

    有没有人做过类似的事情,如果有的话,你用来管理事件流的策略是什么。

    此外,我想在带有ExpirationHandler的backgroundTask中将其全部包装起来,以便在用户按下主页按钮时仍然存在...但是当我这样做时,委托方法不会被调用。

1 个答案:

答案 0 :(得分:0)

Ok这是我为解决问题所做的工作。

  1. 创建了一个NSOperationQueue
  2. 将URL操作添加为NSURLInnvocationOperations 3.等待URL操作完成(waituntilalloperationsarefinished)。
  3. 然后将最大并发计数设置为1,这迫使后续数据库操作一个接一个地串行执行,从而阻止SQLite锁定它自己。