J'ai lancé un thread retardé en utilisant performSelector
mais l'utilisateur a toujours la possibilité d'appuyer sur le bouton Précédent de la vue actuelle pour que dealloc soit appelé. Lorsque cela se produit, mon thread semble toujours appelé, ce qui provoque le blocage de mon application car les propriétés auxquelles ce thread essaie d'écrire ont été libérées. Pour résoudre ce problème, j'essaie d'appeler le cancelPreviousPerformRequestsWithTarget
pour annuler la demande précédente mais cela ne semble pas fonctionner. Voici quelques extraits de code.cancelPreviousPerformRequestWithTarget n'annule pas mon thread précédemment retardé démarré avec performSelector
- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}
- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}
Est-ce que je fais quelque chose de mal ici? La méthode myStopUpdatingLocation
est définie dans la même classe que j'appelle les demandes d'exécution.
Un peu plus de fond. La fonction que j'essaie de mettre en œuvre est de trouver un emplacement d'utilisateurs, de rechercher google pour certains endroits autour de cet emplacement et d'afficher plusieurs annotations sur la carte. Sur viewDidLoad
je commence à mettre à jour l'emplacement avec CLLocationManager
. J'ai construit dans un délai d'attente après 6 secondes si je ne reçois pas la précision désirée dans le délai d'attente et j'utilise un performSelector
pour ce faire. Ce qui peut arriver est que l'utilisateur clique sur le bouton de retour dans la vue et que ce thread s'exécutera même si toutes mes propriétés ont été libérées causant un plantage.
Merci d'avance!
James