0

在我的应用程序中,我在应用程序购买中提供非消耗品来销售歌曲(Mp3)文件。目前我正在列出歌曲列表,当用户点击购买时,我正在显示另一个带有歌曲名称和下载按钮和进度视图的 uitableview(这是下载屏幕的视图)。

当用户继续购买歌曲时,这些歌曲将被添加到 Downloading uitableview 屏幕。用户可以在哪里下载文件。

目前我可以在点击下载按钮时下载文件,它会显示下载进度。所以它工作正常。

现在我想知道,如何在不点击按钮的情况下开始从服务器下载内容。我的意思是当 uitableviewcell 的第一行完成下载时,第二行必须开始下载。

请指导我,我真的找不到任何合适的链接/参考我的问题

4

2 回答 2

0

使用递归和委托,让你用来下载东西的方法调用它的委托,它应该再次调用下载方法,以便下载下一个项目。然后继续这样做,直到下载所有项目并激活标志或其他东西以停止递归。

主意:

现在你有一个下载方法,当用户按下按钮时,它将下载一首歌曲。

因此,代替这让您的 DownloadMethod 接收歌曲或您想要下载的任何内容,例如,它可以是一个数组。

所以现在

DownloadMethod(arrayToDownload)
{
    If (arrayToDownload is not empty)
    { 
        [SongsArray addElement: download song in the last position with your original method]
        [arrayToDownload removeLastLemenet]
       downloadmethod(arrayToDownload)
    }
}

这是做得不好的伪代码,但它的基本思想。请注意,您的操作必须同步执行才能在没有委托的情况下工作。例如,为了让您的界面不挂出,您可以使其在后台队列中执行(只要同步执行下载)

同步的意思是确保这段代码的每一部分都在前一部分之后执行。但是您确实想使用大型中央调度在另一个线程中执行所有代码,这样您的 ui 就不会被锁定。

参考: https ://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

指南: https ://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1

于 2012-08-09T06:30:08.087 回答
0

我不知道你是如何实现你的歌曲下载的。你用的是哪个线程?任何下载都是冗长而繁重的操作,应该在非 UI 线程上完成。

根据您的描述,我建议例如创建一个子类,NSOperation该子类将处理歌曲的下载并用于NSOperationQueue处理它们。

NSOperationQueue您可以指定允许多少并发下载(或默认无限制)。然后每个操作都可以通知(或通过委托)提供下载进度。

  1. 用户通过点击按钮“购买”一首歌曲
  2. NSOperation为歌曲下载创建
  3. 将操作添加到NSOperationQueue- 将当前控制器设置为委托或设置通知
于 2012-08-09T06:39:54.167 回答