从服务器逐个下载文件 - uitableviewcell

时间:2012-08-09 06:24:33

标签: iphone ios ios4 uitableview

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

使用NSOperationQueue,您可以指定允许的并发下载数量(默认情况下为无限制)。然后,每个操作都可以通知(或通过代理)提供下载进度。

  1. 用户通过点击按钮
  2. “购买”一首歌曲
  3. 为歌曲的下载创建NSOperation
  4. 将操作添加到NSOperationQueue - 将当前控制器设置为委托或设置通知