2010-06-08 7 views
0

J'ai implémenté une sous-vue qui est supposée se charger immédiatement lorsque je clique sur un bouton dans la vue parente. Après avoir chargé la sous-vue (qui contient essentiellement un indicateur d'activité), le programme est censé traiter une méthode (qui reçoit des données d'un serveur, donc prend du temps).Traitement d'une méthode après chargement de la vue

Cependant, je suis incapable de le faire.

Ce qui se passe maintenant, c'est que lorsque je clique sur le bouton de la vue parente, il traite la méthode en premier et seulement après que la sous-vue se soit chargée à l'écran.

Pourquoi est-ce ainsi? Existe-t-il des fonctions spécifiques que je pourrais utiliser pour charger ma méthode seulement après le chargement de la vue?

Répondre

2

J'ai rencontré le même problème et j'ai utilisé NSAutoreleasePool et résolu ce problème. J'espère que ça t'aidera.

- (void)viewDidLoad { 

    [self performSelectorInBackground:@selector(loadXml) withObject:nil]; 

} 

-(void) loadXml{ 

     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

     NSString * path [email protected]"http:www.YOUR_RSS_FEED.com"; 

     [self parseXMLFileAtURL:path];  //(Instead of ViewDidAppear) 

     [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 

     [pool drain]; 

    } 

Merci.

+0

@Warrior, Vérifiez ma mise à jour Réponse. – Pugal

+0

Maintenant, c'est plus clair ... – Warrior

0

Quelques approches différentes:

Si la sous-vue a une fonctionnalité que le chargement d'une image et faire des choses plus compliquées que d'être simplement une vue, une bonne approche consiste à en faire un lieu ViewController.

Dans l'utilisation top ViewController:

- (void) loadView { 
    [super loadView]; 
} 

de mettre en place des choses qui doivent être prêts à l'affichage de la vue.

L'utilisation:

-(void) viewDidLoad { 

} 

pour faire une configuration supplémentaire.

Dans votre cas, il semble que vous deviez ajouter l'indicateur dans la méthode loadView, puis démarrer la récupération des données dans la méthode viewDidLoad.

Si vous accédez à des services Web, effectuez toujours cette opération sur un fil différent. (cherchez dans NSOperation un bon moyen simple d'y parvenir).

Questions connexes