2011-08-30 8 views
8

devo applicazione barra delle linguette, in prima scheda ho un WebView, così quando l'utente apre il sito e andare a scaricare qualche formato mp3 song, è spingere un'altra vista che prende il titolo da parte dell'utente .problema a scaricare più brani in TabBar Applicazione

dopo aver dato il titolo, ho appena cambiato il tabbarSelectController in un titolo per il brano e il download inizia e viene mostrato nella barra delle tabulazioni all'Indice 1. selezionato quando cambio la scheda sull'indice 0 selezionato e seleziono un'altra canzone per il download e ancora torna a selectedIndex 1 prima interruzione del download e secondo recupero del download.

quindi voglio scaricare più brani e non hanno molta idea di come fare che in questo scenario perché all'utente di aggiungere le canzoni in modo dinamico che ho visto ASINtworkQueue così ma non ottenere l'idea di come funziona

risposta

1

il ASINetworkQueue è solo una sottoclasse di NSOperationQueue, ciò che fa, è creare una coda di oggetti richiesta, così per esempio, è possibile avere 10 richieste in attesa, e partecipare a 5 alla volta, quando una richiesta è stata completata, una nuova richiesta in la coda diventa attiva.

Avere una coda di richieste è certamente utile nel tuo caso, ma non hanno alcun codice incollato, su come hai a che fare con le richieste al momento. Quindi ti darò un "concetto generale" su come dovrebbe essere fatto:

In primo luogo, presumo che tu abbia già capito come identificare quando l'utente sta per scaricare il brano e avere il URL del file. In caso contrario, here's another question related. Inoltre, have ASI installed.

Aggiungiamo un oggetto che gestisce i download, per esempio, DownloadManager:

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

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

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

farò questa classe si comporta come un Singleton (based on this answer), perché immagino che si sta lavorando con una sola coda di download . Se questo non è il caso, adattarlo alle proprie esigenze:

@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 

Con tutto quello che fatto, ora è possibile aggiungere le richieste di download semplicemente facendo:

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

La prima scheda potrebbe aggiungere gli elementi al DownloadManager, l'altra scheda dovrebbe sentire per quando un download è completo, o lo stato corrente. Non l'ho aggiunto al codice, in quanto dipende da come fai queste cose. Potrebbe essere un metodo delegato personalizzato (ad esempio - (void)DownloadManager:(DownloadManager*)downloadManager didFinishDownloadRequest:(ASIHTTPRequest*)request) o passare l'attuale delegato delle richieste o utilizzando NSNotificationCenter.

+0

belle ans ma come ci mostra il progresso in ProgressBar altra tabella in tableView allora?. Se l'utente aggiunge una richiesta alla volta e questo è in fase di download e aggiunge un'altra richiesta, allora cosa succede? – dark

+0

u possibile scaricare i songgs in thread in background, quindi se un altro viene u bisogno di fare la coda è fino prima completato utilizzando il NSOperation anche ...... quindi u bisogno di puntate le operazioni .. –

+0

@lak in Iphone avete qualche link tutorial di esso ?? – dark

1

io suggerisco che modo diverso ..

Prova a mettere un codice per il download in canzone classe diversa. Iphone O.S. avvierà automaticamente una nuova connessione per ogni oggetto di quella classe. Ora entrambi i download possono continuare contemporaneamente.

E funziona beautyfully. L'ho visto.

Problemi correlati