iphone - tabBar应用程序中下载多首歌曲的问题

标签 iphone ios4 uitabbarcontroller

我有标签栏应用程序,在第一个标签中我有一个 webView,因此当用户打开网站并要下载一些歌曲 mp3 格式时,它会推送另一个 View ,该 View 从用户那里获取标题。

给出标题后,我只需将 tabbarSelectController 更改为歌曲的一个标题 下载开始并显示在选项卡栏上选定的索引 1 处。当我将选项卡更改为选定的索引 0 并选择另一首歌曲进行下载并再次返回到选定的索引 1 时,第一次下载停止,第二次下载恢复。

所以我想下载多首歌曲,但不太知道在这种情况下如何做到这一点,因为用户动态添加歌曲我也见过 ASINtworkQueue,但不知道它是如何工作的

最佳答案

ASINetworkQueue 只是 NSOperationQueue 的子类,它的作用是创建一个 Request 对象队列,例如,您可以有 10 个请求等待,并且一次参加 5 个请求,当一个请求完成后,队列中的另一个请求将变为事件状态。

拥有一个请求队列对于您的情况当然很有帮助,但是您还没有粘贴任何关于您现在如何处理请求的代码。所以我会给你一个关于如何完成的“一般概念”:

首先,我假设您已经弄清楚如何识别用户何时要下载歌曲,并拥有文件的 URL。如果没有,here's another question related 。另外,have ASI installed

让我们添加一个处理下载的对象,例如 DownloadManager:

#import "ASINetworkQueue.h"
#import "ASIHTTPRequest.h"

@interface DownloadManager : NSObject <ASIHTTPRequestDelegate>
{
    ASINetworkQueue *requestQueue;
}

+ (DownloadManager*)sharedInstance;
- (void)addDownloadRequest:(NSString*)URLString;

我将使此类表现得像单例( based on this answer ),因为我想象您正在使用单个下载队列。如果情况并非如此,请根据您的需要进行调整:

@implementation DownloadManager

static DownloadManager *_shared_instance_download_manager = nil;

+ (DownloadManager*)sharedInstance
{
    @synchronize
    {
        if (!_shared_instance_download_manager)
        {
            _shared_instance_download_manager = [[DownloadManager alloc] init];
        }

        return _shared_instance_download_manager
    }
}

- (id)init
{
    self = [super init];

    if (self)
    {
        requestQueue = [[ASINetworkQueue alloc] init];
        requestQueue.maxConcurrentOperationCount = 2;
        requestQueue.shouldCancelAllRequestsOnFailure = NO;
    }

    return self;
}

- (void)addDownloadRequest:(NSString*)URLString
{
    NSURL *url = [NSURL URLWithString:URLString];

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    request.delegate = self;

    [requestQueue addOperation:request];
    [requestQueue go];
}

- (void)requestFinished:(ASIHTTPRequest*)request
{
    // Request finished.
}

- (void)dealloc
{
    [requestQueue release];

    [super dealloc];
}

@end

完成所有这些后,现在您可以简单地添加下载请求:

DownloadManager *manager = [DownloadManager sharedInstance];
[manager addDownloadRequest:MyUrl];

第一个选项卡会将项目添加到 DownloadManager,另一个选项卡必须听到下载何时完成或当前状态。我没有将其添加到代码中,因为它取决于您如何做这些事情。它可以是自定义委托(delegate)方法(即 - (void)DownloadManager:(DownloadManager*)downloadManager didFinishDownloadRequest:(ASIHTTPRequest*)request),或传递请求的当前委托(delegate),或使用 NSNotificationCenter .

关于iphone - tabBar应用程序中下载多首歌曲的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244836/

相关文章:

iphone - 如何解决使用未声明的标识符 'UIKeyboard' 错误?

iphone - 限制要显示的表格单元格数量

iPhone iOS 4 addTimeInterval 已弃用

iphone - CAReplicatorLayer 随机位置

ios - UITabBarController 应用程序和pushViewController 失败

ios - 从另一个 View Controller 更改选项卡栏选定项

ios - 更改 UITabBarController iOS 中角标(Badge)值的外观?

iPhone 方法原型(prototype)

iphone - 从 iPhone 地址簿中获取一个人的图像

iphone - iOS 4 的透明应用程序图标?