Ich habe einen verzögerten Thread mit performSelector
gestartet, aber der Benutzer hat weiterhin die Möglichkeit, die Zurück-Schaltfläche der aktuellen Ansicht zu drücken, wodurch dealloc aufgerufen wird. Wenn das passiert, scheint mein Thread immer noch aufgerufen zu werden, was dazu führt, dass meine App abstürzt, weil die Eigenschaften, zu denen Thread schreiben möchte, freigegeben wurden. Um dies zu beheben, versuche ich cancelPreviousPerformRequestsWithTarget
anzurufen, um die vorherige Anfrage abzubrechen, aber es scheint nicht zu funktionieren. Im Folgenden finden Sie einige Code-Snippets.cancelPreviousPerformRequestWithTarget bricht meinen zuvor verzögerten Thread nicht ab, der mit performSelector gestartet wurde
- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}
- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}
Mache ich etwas falsch hier? Die Methode myStopUpdatingLocation
ist in derselben Klasse definiert, in der ich die perform-Anfragen anrufe.
Ein wenig mehr Hintergrund. Die Funktion, die ich zu implementieren versuche, ist, einen Standort für den Benutzer zu finden, google nach bestimmten Orten in der Umgebung zu suchen und mehrere Anmerkungen auf der Karte anzuzeigen. Unter viewDidLoad
beginne ich, den Standort mit CLLocationManager
zu aktualisieren. Ich habe ein Timeout nach 6 Sekunden eingebaut, wenn ich nicht innerhalb des Timeouts meine gewünschte Genauigkeit erhalte und dafür eine performSelector
benutze. Was passieren kann, ist, dass der Benutzer auf die Zurück-Schaltfläche in der Ansicht klickt und dieser Thread weiterhin ausgeführt wird, obwohl alle meine Eigenschaften freigegeben wurden und einen Absturz verursachen.
Vielen Dank im Voraus!
James