我有标签栏应用程序,在第一个标签中我有一个 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/