2011-11-24 14 views
5

Cuando instalo mi aplicación en iphone y la ejecuto por primera vez, solicita permiso al usuario para el servicio de ubicación central. Aquí está la imagen para el simulador.iPhone: problema emergente de Ubicación central

En mi aplicación, mi primera vista de la aplicación necesita una ubicación actual y, según la ubicación, enumera algunos eventos. Si la aplicación no pudo obtener la ubicación, muestra la lista de eventos predeterminada.

Entonces, me gustaría saber si es posible mantener el flujo de la aplicación hasta que el usuario haga clic en el botón "Don't allow" o "ok"?
Sé que si el usuario hace clic en "No permitir", se disparará el error kCLErrorDenied.

Actualmente, si el usuario no hace clic en ninguno de los botones, la aplicación muestra la página de listado con la lista predeterminada (sin ubicación). Y después de eso, si el usuario hace clic en el botón "ok", ¡no pasa nada! ¿Cómo puedo actualizar la página al hacer clic en el botón "ok"?

Gracias ....

enter image description here

Respuesta

1

Sí, simplemente no hacer nada hasta que se invocan los métodos de delegado. Cuando hacen clic en 'Aceptar', eso es solo una señal para que Cocoa vaya y luego intenta recuperar la ubicación del usuario: debe estructurar su aplicación para que cuando CLLocationManager tenga una ubicación o no la pueda obtener, su aplicación continuará.

No desearía decir, pausa su aplicación hasta que la ubicación regrese/falla; de eso no se trata el desarrollo orientado a objetos.

0

En su lógica de vista, espere hasta que se llamen los delegados CoreLocation de didUpdateToLocation o didFailWithError. Haga que esos métodos llamen/inicien su lista y llenen los datos de la interfaz de usuario. Controlador

muestra:

Cabecera

@interface MyCLController : NSObject <CLLocationManagerDelegate> { 
    CLLocationManager *locationManager; 
} 

@property (nonatomic, retain) CLLocationManager *locationManager; 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation; 

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error; 

@end 

Código

#import "MyCLController.h" 

@implementation MyCLController 

@synthesize locationManager; 

- (id) init { 
    self = [super init]; 
    if (self != nil) { 
     self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
     self.locationManager.delegate = self; // send loc updates to myself 
    } 
    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Location: %@", [newLocation description]); 

    // FILL YOUR VIEW or broadcast a message to your view. 

} 

- (void)locationManager:(CLLocationManager *)manager 
      didFailWithError:(NSError *)error 
{ 
    NSLog(@"Error: %@", [error description]); 

    // FILL YOUR VIEW or broadcast a message to your view. 
} 

- (void)dealloc { 
    [self.locationManager release]; 
    [super dealloc]; 
} 

@end 
Cuestiones relacionadas