J'ai un problème sérieux avec mon application iOS.Les ViewControllers ne sont pas destructeurs
J'ai une logique de connexion dans mon application. Lors de la connexion et de la déconnexion, certains contrôleurs de vue ne sont pas destructeurs. Cela provoque certains problèmes, par exemple, certains événements que j'émets en utilisant NSNotifcationCenter
sont émis plusieurs fois. Ces problèmes sont évitables, mais je veux vraiment une solution pour éviter que certains contrôleurs de vue restent ouverts en arrière-plan sans que je ne les contrôle.
La façon dont contrôler la logique de connexion est la suivante:
Dans le délégué de l'application fonction de démarrage, si l'utilisateur est déjà connecté, régler le régulateur de vue racine au contrôleur principal de vue utilisable. Par conséquent, je ne fais rien et le contrôleur de vue racine est défini sur le contrôleur de navigation du contrôleur de vue de connexion via le storyboard. Lorsque l'utilisateur se déconnecte, j'utilise une synchronisation modale pour ramener le contrôleur de vue sur le contrôleur de navigation du contrôleur de vue de connexion. Comme vous pouvez le comprendre, j'utilise des storyboards, swift et le tout dernier iOS.
Mon code est Segue que la déconnexion me prendre au LoginViewControler:
self.performSegueWithIdentifier("Logout", sender: self)
Mon application Code délégué:
if (userDefaults.valueForKey("uid") != nil) {
let tabBarView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("TabBarViewController") as! TabBarViewController
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = tabBarView
}
Qu'est-ce que je fais mal?
Je vous serais reconnaissant de l'aide :)
EDIT
J'ai même essayé de mettre juste le contrôleur de vue racine dans l'action et fermeture de session n'a pas aidé non plus. Comment est-ce possible?
Voici comment je fais la fermeture de session maintenant:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let newRootViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginNavigationController") as! UINavigationController
appDelegate.window!.rootViewController = newRootViewController
Lorsque vous vous déconnectez, quel est le contrôleur View racine de votre fenêtre? Vous ne le réinitialisez peut-être pas et la fenêtre maintient le CV en vie. –
Comme ici est la fonctionnalité de connexion, vous devriez faire des demandes de backend. Pourriez-vous s'il vous plaît poster ce code à votre question? cela peut être un problème avec le nombre de retenue dans ce morceau de code. – Ramis
J'ai peur qu'il n'y ait pas assez d'informations. C'est un problème avec les fuites de mémoire, elles peuvent être causées n'importe où. Il est très difficile de trouver une fuite de mémoire à partir de quelques morceaux de code. Le contrôleur peut s'empêcher de désallouer avec une fermeture, par exemple. – Sulthan