2010-04-06 5 views
2

Je suis nouveau au développement iphone.J'ai créé une application, dans laquelle la première vue de la barre d'onglets, charger une page web et dans la deuxième barre d'onglets, il analyse un fichier xml et affiche le contenu dans la vue tableau. Lorsque je clique sur la deuxième barre d'onglets, la vue de la barre d'onglets est vue seulement après l'analyse, jusqu'à ce que la barre d'onglets apparaisse comme désélectionnée. Je veux afficher la vue de tabulation avec l'indicateur d'activité quand l'analyse est terminée. Je l'accomplis. S'il vous plaît, aidez-moi. Merci.Comment faire apparaître la vue tabbar lorsque l'analyse est effectuée dans iphone?

Répondre

1

Sans informations supplémentaires sur est difficile à dire, mais je suppose que vous êtes en train d'analyser le fichier XML à l'intérieur viewDidLoad() ou loadView(). Cependant, l'analyse peut nécessiter du temps et vous bloquez le thread principal responsable de la mise à jour de l'interface utilisateur. C'est la raison pour laquelle vous ne voyez la barre d'onglets qu'une fois l'analyse terminée. Pour remédier à cette situation, vous devez différer l'affichage de la table en affichant des données, afficher un indicateur d'activité pour indiquer à vos utilisateurs que quelque chose se passe et démarrer un thread d'arrière-plan chargé d'analyser votre fichier XML. Le fichier XML une fois terminé arrête l'indicateur d'activité et configure votre vue de table avec les données analysées.

Vous pouvez le faire très facilement en utilisant l'API disponible (detachNewThreadSelector:toTarget:withObject: et performSelectorOnMainThread:withObject:waitUntilDone: etc), cependant, vous voudrez peut-être envisager de tirer parti de MBProgressHUD qui fournit exactement la fonctionnalité dont vous avez besoin Enveloppé dans une très facile à utiliser la classe.

0

Je présume que vous savez ou serez en mesure de comprendre comment fonctionne l'indicateur d'activité.

Vous pouvez utiliser des méthodes déléguées NSXMLparser pour analyser les données XML. vous pouvez collecter les données XML dans les objets de modèle que vous créez en tant que propriétés dans votre classe qui analyse le fichier XML, c'est-à-dire un tableau simple. puis, à partir de la vue que vous voulez être averti de l'analyse terminée, vous pouvez l'enregistrer en tant qu'observateur pour le keypath à ces objets de modèle en utilisant l'observation de valeur de clé (KVO). Une fois la valeur de ces propriétés modifiée, votre vue (ou classe intermédiaire) recevra un message qu'elle pourra ensuite utiliser pour mettre à jour l'affichage.

Ces messages seront envoyés aux observateurs enregistrés aussi longtemps que la classe qui envoie le message est compatible avec le codage de valeur de clé (KVC) pour ces propriétés. rendre vos ivars accessibles à travers les propriétés est suffisant dans la plupart des cas.

pour ajouter un observateur:

- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context 

pour être informé des changements:

- (void)didChangeValueForKey:(NSString *)key 

vérifier la valeur de clé documentation d'observation:

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20002299-SW7

0

je pense que vous devriez devez utiliser la classe NSTimer avec la durée spécifiée.

exécutez la méthode qui analyse les données (c.-à-d.méthode GetXMLData méthode définie --user) à travers elle,

NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(GetXMLData:) userInfo:nil repeats:NO]; 

et commencer indicateur d'activité à l'aide

[activityIndicator startAnimating]; 

arrêt dans la méthode ci-dessous

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
. 
. 
. 
[activityIndicator stopAnimating]; 

} 

j'espère que vous undrstand ce que je suis dire ... faire un commentaire si besoin d'aide ...

0
  1. ne font pas d'analyse syntaxique MainThread, détachez un nouveau thread pour l'analyse syntaxique ([NSThread detachNewThreadSelector: toTarget: withObject:])
  2. après analysé (parserDidEndDocument:) utilisent performSelectorOnMainThread pour actualiser la tableView .
Questions connexes