2012-07-27 13 views
10

Llamo por la ubicación actual cada vez que el usuario inicia sesión y en varios otros lugares. Cada vez que lo hago, la vista de alerta que solicita permiso del usuario aparece por un segundo y luego desaparece. Y, obviamente, no entiendo la ubicación. esto sucede cada vez que solicito la ubicación. No permite al usuario hacer clic en Cancelar o Aceptar. Por favor, ayudaAlerta de CLLocationManager desestimándose por sí mismo

+1

se resolvió por sí mismo. :) –

+0

¡También encontré este problema y no puedo entender por qué! – tagyro

Respuesta

14

Es probable que no estuviera conservando el locationManager. Como consecuencia, cuando llamó al [CLLocationManager startUpdatingLocation], se mostró la alerta, pero desaparece en cuanto se lanza el locationManager. Me pasó una vez cuando escribí asignar en lugar de fuerte en la propiedad que había creado para mi instancia de locationManger.

+0

¿Por qué no pensé en eso? Gracias. – DCMaxxx

+0

@NikitaP Esto debe marcarse como la respuesta. –

0

Mismo problema que enfrento en mi proyecto (swift lang).

intente esto, declare que CLLocationmanage variable como variable global y llame donde desee.

ejemplo:

var locManager = CLLocationManager() 

    override func viewDidLoad() 
    { 


    super.viewDidLoad() 

let iOS7 = floor(NSFoundationVersionNumber) <= floor(NSFoundationVersionNumber_iOS_7_1) 

let iOS8 = floor(NSFoundationVersionNumber) > floor(NSFoundationVersionNumber_iOS_7_1) 

      locManager.delegate = self 
      locManager.desiredAccuracy = kCLLocationAccuracyBest 
      if(iOS8) 
      { 
       locManager.requestAlwaysAuthorization()// only support ios 8.0 
      } 

    } 
0

intenta mover método delegado colocador después startUpdatingLocation. Esto funciona para mi. Ejemplo:

CLLocationManager *m = [[CLLocationManager alloc] init]; 
[m startUpdatingLocation]; 
m.delegate = self; 

opz, mi pobre Inglés.

0

No puedo comentar su publicación, así que estoy respondiendo aquí.

Gianluca Tranchedone tiene razón. Soy mi caso, estaba conservando el CLLocationManager. PERO: dispara la primera devolución de llamada, justo después de que se muestra AlertView, para decirle al delegado que el estado es indeterminado. Cometí el error de liberar la instancia cuando se recibió la devolución de llamada.

Esto es lo que el método que ahora se parece y funciona:

-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
switch (status) { 
    case kCLAuthorizationStatusNotDetermined: 
     break; 
    default: 
     _locationManagerForAuthorizationRequest.delegate = nil; 
     self.locationManagerForAuthorizationRequest = nil; 
} 

}

Cuestiones relacionadas