2010-08-16 13 views
0

J'ai une application iPhone qui a une vue qui a besoin de récupérer beaucoup de données sur une variété de sites internet. Par conséquent, le temps requis pour le charger est inacceptable. Je me demandais s'il y avait un moyen de charger la vue pendant la méthode 'applicationDidFinishLaunching' afin que le délai soit au démarrage de l'application au lieu de la navigation à mi-chemin.Précharger UIView pour minimiser les retards lors de l'exécution de l'application Iphone

Merci beaucoup!

Répondre

1

Vous souhaitez charger la vue aussi rapidement que possible, puis lancer un thread d'arrière-plan ou une requête asynchrone pour extraire les données. Il est déconseillé de mettre votre application en veille pendant la charge initiale. Je crois que SpringBoard mettra fin à toute application qui prend plus de 30 secondes pour terminer le chargement.

C'est une mauvaise expérience utilisateur d'avoir l'application faire quelque chose sans retour visible à l'utilisateur (UIActivityView animé par exemple)

+0

Je voulais faire dormir pendant 4 secondes, pas 30 - juste pour afficher l'écran de démarrage parce que c'est assez cool mais je vais avec le chargement asynchrone et les roues. Je suis surtout satisfait de ça. Merci de votre aide! – Rossi

0

Avez-vous déjà envisagé de charger les données de manière asynchrone? Pendant le chargement, l'interface utilisateur n'est pas bloquée. Par exemple, vous pouvez montrer une belle roue de chargement lorsque votre application est en train de charger les données. C'est ainsi que toutes les bonnes applications font cela.

+0

Oui, mais je fais le sommeil de l'application au début montrer mon écran d'accueil de toute façon si je Je me suis dit qu'il serait astucieux de faire du travail pendant ce temps. C'est mon plan de sauvegarde, donc ça pourrait toujours être cool. – Rossi

0

Si la vue initiale a une viewController séparée de votre point de vue « données », vous pouvez ajouter une référence à la Dataview au appDelegate et faire quelque chose comme:

if (self.curAccountManager == nil) { 
    self.curAccountManager = [[accountManagerController alloc] initWithNibName:@"accountManager" bundle:[NSBundle mainBundle]]; 
    if (![self.curAccountManager isViewLoaded]) { 
     UIView *tmpView = self.curAccountManager.view; 
     tmpView = nil; 
    } 



} 

Cela va charger la vue. Mais si le chargement est important, lorsque l'utilisateur bascule dessus, il peut ne pas répondre correctement. Je vous suggère de suivre la suggestion ci-dessus et dans votre vue de données charger les données de manière asynchrone afin que vous puissiez au moins afficher le statut de l'utilisateur ou des résultats partiels.

+0

oui, merci - je vais aller avec le chargement asynchrone - c'est presque parfait de cette façon - un léger décalage et la rotation des roues, mais je vais surmonter cela. Merci de votre aide! – Rossi