2010-10-27 3 views
0

J'essaie de décharger un contrôleur de vue de la vue lorsque l'iPhone se met en veille. Mon application dispose d'un chronomètre qui doit continuer à compter lorsque le téléphone se met en veille ou que l'appel arrive ou que l'utilisateur ferme l'application sans se déconnecter.App Delegate - Décharger View Controller

J'ai toute cette fonctionnalité en place, je capture tous les heures de début et de fin et en rentrant dans le contrôleur de vue chronomètre, je calcule la différence. Tout fonctionne à merveille. Lorsque je faisais des tests supplémentaires, je me suis rendu compte que je n'avais pas prévu que l'iPhone passe en mode veille.

Alors tout ce que je dois faire pour m'assurer que mon chronomètre est correct ramène l'utilisateur à l'écran d'accueil de l'application. Je sais que la méthode suivante est appelée lorsque l'application va dormir:

-(void)applicationWillResignActive:(UIApplication *)application 

Comment puis-je décharger le contrôleur de vue du chronomètre de mon délégué app?

---- ---- ACTUALISATION

kpower, merci pour vos commentaires. Je l'ai mis en œuvre le code suivant:

Dans mon délégué App:

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"AppIsAsleep" object:nil]; 
} 

Dans mon contrôleur de vue, je donne les résultats suivants:

-(void)viewDidLoad 
{ 
    // Add Observer. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDidUnload:) name:@"AppIsAsleep" object:nil]; 
} 

- (void)viewDidUnload { 
    //Remove the Observer. 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AppIsAsleep" object:nil]; 
} 

Lorsque le téléphone va dormir, il fait ferme l'application, est-ce que je fais quelque chose de mal?

Cordialement, Stephen

+0

ce n'est pas très clair ce que vous voulez dire par décharger le contrôleur de vue. s'il vous plaît être plus de détails. Essayez-vous de supprimer la vue? – taskinoor

Répondre

1

Vous pouvez utiliser le mécanisme Notifications. Il vous permet de décharger le contrôleur de vue à partir d'un endroit différent (pas l'AppDelegate) dans ce cas.

Par exemple, dans votre méthode de contrôleur de vue viewDidLoad vous ajoutez un observateur (ne pas oublier de l'enlever dans viewDidUnload) et applicationWillResignActive: méthode de AppDelegate que vous publiez simplement la notification. C'est tout.

↓   Mise à jour   ici   ↓

Lorsque vous recevez une notification - vous devez gérer la suppression du contrôleur vue par vous-même. Et l'appel viewDidUnload ici n'est pas la solution, parce que cette méthode est appelée après le contrôleur de vue était déjà déchargé et ne provoque pas la suppression.

Comment supprimer? Dépend de la manière dont le contrôleur de vue a été ajouté (par exemple, popViewControllerAnimated pour UINavigationController). L'idée principale ici est de faire en sorte que le nombre de retenues de l'objet soit égal à 0 (comme vous le savez, un objet sera détruit) - vous devriez donc envoyer le message de libération nécessaire nombre de fois.

+0

kpower, merci pour vos commentaires. J'ai mis à jour ma question ci-dessus avec le code que j'ai implémenté. Mais il semble fermer complètement l'application. Des pensées ? – Stephen

Questions connexes