2009-07-21 6 views
1

Dans mon application, lorsqu'un utilisateur clique sur un bouton, je souhaite afficher un écran de chargement, puis appeler une méthode qui chargera les données du réseau, puis charger une vue qui affiche les données dans UITableView. J'ai tout fonctionné sauf montrer l'écran de chargement. (L'interface utilisateur se bloque en raison de l'exécution de la logique de données/analyse réseau) Quelqu'un peut-il me montrer comment configurer l'activité réseau pour qu'elle s'exécute dans un thread distinct et que je devrais initier ce thread.Threads, TableViewController, Voir la question de transition. iPhone

J'ai un rootViewController qui s'occupe des transitions. A sous-classes UIViewController, UIView, et un UITableViewController pour traiter cette vue.

Répondre

0

Mettez le code de fond à l'intérieur d'une méthode comme:

- (void)backgroundLogic; 
{ 
    NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ]; 
    // do stuff here 
    [ pool release ]; 
} 

afficher ensuite l'écran de chargement, puis commencer ce travail dans un thread séparé en utilisant

[NSThread detachNewThreadSelector: @selector(backgroundLogic) toTarget: self withObject: nil]; 

Après le fil d'arrière-plan est terminé Vous pouvez ignorer l'écran de chargement et continuer avec le flux normal de l'application.

+0

Quand est-ce que je détache le fil? dans viewDidLoad de UITableViewController? –

+0

Juste pour clarifier l'utilisateur va regarder une vue. Ils cliquent sur un bouton. Je charge des données du réseau et appelle une fonction d'analyse ou deux. Ensuite, je charge une nouvelle vue affichant les données dans une tableView. –

+0

viewDidLoad semble être un endroit raisonnable pour détacher le fil. –

Questions connexes