He lanzado un hilo retrasado usando performSelector
pero el usuario todavía tiene la habilidad de presionar el botón Atrás en la vista actual haciendo que se llame a dealloc. Cuando esto sucede, parece que se ha llamado a mi hilo, lo que hace que la aplicación se bloquee porque las propiedades en las que está intentando escribir el hilo han sido liberadas. Para resolver esto, intento llamar al cancelPreviousPerformRequestsWithTarget
para cancelar la solicitud anterior, pero parece que no funciona. A continuación se encuentran algunos fragmentos de código.cancelPreviousPerformRequestWithTarget no cancela mi thread previamente retrasado iniciado con performSelector
- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}
- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}
¿Estoy haciendo algo incorrecto aquí? El método myStopUpdatingLocation
se define en la misma clase a la que llamo las solicitudes de ejecución.
Un poco más de fondo. La función que intento implementar es buscar la ubicación de un usuario, buscar en Google algunas ubicaciones alrededor de esa ubicación y mostrar varias anotaciones en el mapa. En viewDidLoad
empiezo a actualizar la ubicación con CLLocationManager
. He construido en un tiempo de espera después de 6 segundos si no obtengo la precisión deseada dentro del tiempo de espera y estoy usando un performSelector
para hacer esto. Lo que puede suceder es que el usuario haga clic en el botón Atrás en la vista y este subproceso se ejecutará aunque todas mis propiedades se hayan liberado y se haya producido un bloqueo.
¡Gracias de antemano!
James