Domanda

Ho un'applicazione UITabBar con due punti di vista che caricano grandi quantità di dati dal web nei loro metodi "viewWillAppear". Voglio mostrare una barra di avanzamento o di un indicatore di attività mentre questo i dati vengono recuperati, per assicurarsi che l'utente conosce l'applicazione non è congelato.

Sono consapevole del fatto che questo è stato chiesto prima. Ho semplicemente bisogno di qualche chiarimento su quello che sembra essere una buona soluzione piuttosto .

Ho implimented il codice dell'esempio. richiedente iniziale della domanda successiva risolto il problema, mettendo il reperimento dei dati in un altro "filo". Capisco il concetto di thread, ma non so come avrei impliment questo.

Con la ricerca, ho scoperto che ho bisogno di spostare tutto il mio pesante recupero dei dati in un thread in background, come tutti l'aggiornamento dell'interfaccia utente si verifica nel thread principale.

Se uno sarebbe così gentile da fornire un esempio per me, sarei molto riconoscente. Posso fornire parti del mio codice esistente, se necessario.

È stato utile?

Soluzione

Se si utilizza NSURLConnection che gira su un altro thread automaticamente.

nel viewDidLoad:

NSURLRequest *req = [NSURLRequest requestWithURL:theURL];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

allora avete bisogno di alcuni metodi personalizzati. Se si digita -connection e premere Esc vedrete tutti i diversi metodi che è possibile utilizzare. Ci sono tre dovrai con questo:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this is called when there is a response
        // if you're collecting data init your NSMutableData here
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // each time the connection downloads a 
        // packet of data it gets send here
        // so you can do [myData appendData:data];
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection has finished so you can 
        // do what you want with the data here
}

Questo è praticamente tutto ciò che devi fare. NSURLConnection gestisce tutto il multithreading se stessa e non si deve preoccupare. Ora è possibile creare un indicatore di attività e visualizzarlo e funzionerà perché il thread principale è vuota. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top