2011-09-28 68 views
0

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

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

这是我想要它做的。

  1. 下载主更新URL(工作正常)
  2. 然后下载一个辅助URL。
  3. 然后应用第一URL内容sqlite的存储(代码为书面)
  4. 再申请第二个URL内容sqlite的存储(代码为书面)

(所有的同时显示进度给用户)

当下载同步时,这很容易,因为我只是等待他们完成以便关闭下一个活动,但是当使用异步方法时,我正在努力如何让他们等待。步骤3取决于步骤1完成,步骤4取决于步骤2完成,并且总体成功取决于所有完成。步骤4需要等待步骤3完成,否则数据库锁定将导致冲突。

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

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

另外我想用ExpirationHandler把它全部包装在一个backgroundTask中,这样它可以在用户按下主页按钮的时候生存......但是当我这样做时,委托方法不会被调用。

回答

0

好的这是我做了什么来解决这个问题。

  1. 创建了一个NSOperationQueue
  2. 新增的URL操作为NSURLInnvocationOperations 3.waited直到URL的操作是完全的(waituntilalloperationsarefinished)。

然后将最大并发计数设置为1,强制后续数据库操作依次执行,从而阻止SQLite锁定自己。