Domanda

Sto caricando un mucchio di file dall'iPhone a un servizio web. Voglio avere un UIAlertView sullo schermo con all'interno un UIActivityIndicatorView. L'ho fatto per funzionare bene. Tuttavia, voglio aggiornare il titolo di UIAlertView ogni volta che viene caricato ogni file. (" Caricamento file 1 ... " ;, " Caricamento file 2 ... " ;, ecc.)

So che non puoi semplicemente impostare il titolo in un ciclo con richieste Web sincrone poiché il ciclo di esecuzione dell'interfaccia utente non verrà mai chiamato. Ho provato a utilizzare NSTimer per disattivare le richieste Web, ma poiché ogni durata della richiesta è imprevedibile, non funziona. (Il messaggio potrebbe essere aggiornato prima che la richiesta sia effettivamente terminata.)

Voglio davvero caricare ogni file in modo sincrono, uno alla volta, poiché la larghezza di banda dell'iPhone è piuttosto limitata. Non riesco proprio a capire un meccanismo per dire "una volta terminata questa operazione sincrona, lascia che l'interfaccia utente venga aggiornata per un segno di spunta, quindi esegui un'altra operazione sincrona".

È stato utile?

Soluzione

OK, ecco l'approccio che ho adottato per risolvere questo problema:

  1. Crea UIAlertView
  2. Avvia una richiesta web asincrona per pubblicare l'elemento, imposta il delegato su self
  3. Nel metodo connectionDidFinishLoading: controlla se ci sono più articoli da pubblicare. Se ci sono, aggiorna il titolo e avvia un'altra richiesta asincrona. In caso contrario, chiudere l'avviso.

Significa che devi mantenere alcune variabili di classe per tracciare quale richiesta sta caricando ma funziona perfettamente e non comporta alcun thread complicato o altro.

Altri suggerimenti

ci hai provato?

alertView.title = @"new title";
[alertView setNeedsDisplay];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top