2010-11-30 5 views
1

Je développe une application qui a de nombreuses vues. Dans mon application parfois l'utilisateur arrive à une vue où il peut demander sa position en cliquant sur un bouton. J'essaie de suivre les lignes directrices d'Apple pour ne demander que la position de l'utilisateur si l'utilisateur le permet. Que dois-je faire, utiliser le premier code suivant dans le délégué de l'application et déclarer un attribut du gestionnaire d'emplacement dans l'affichage que l'utilisateur appelle, en passant l'attribut du gestionnaire d'emplacement à la nouvelle vue et à l'autre que l'utilisateur clique sur le bouton pour se localiser? ou utilisez simplement le second code, en déclarant un attribut de gestionnaire d'emplacement seulement dans les vues qui permettent d'obtenir l'emplacement de l'utilisateur avec un bouton, pour vérifier si les services de localisation sont activés?Travailler avec iOS Location Manager

Premier extrait.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 

    // Add the navigation controller's view to the window and display. 
    [window addSubview:navigationController.view]; 
    [window makeKeyAndVisible]; 

    // Create a location manager instance to determine if location services are enabled. This manager instance will be 
    // immediately released afterwards. 
    CLLocationManager *manager = [[CLLocationManager alloc] init]; 
    if (manager.locationServicesEnabled == NO) { 
     UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [servicesDisabledAlert show]; 
     [servicesDisabledAlert release]; 
    } 
    [manager release]; 

    return YES; 
} 

Deuxième extrait.

- (IBAction)locateUser:(id)sender { 

    if([CLLocationManager locationServicesEnabled]) { 
     self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
     self.locationManager.delegate = self; 
    } else { 
     [[[[UIAlertView alloc] initWithTitle:@"Location services." 
            message:@"Location services are disabled." 
            delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil] autorelease] show];  
    } 
} 

Merci d'avoir lu.

+0

Personne ne peut m'aider? –

Répondre

1

CoreLocation gère toutes les alertes pour vous. Si les services de localisation sont désactivés et que vous demandez l'emplacement, CoreLocation affichera une alerte indiquant ainsi à l'utilisateur avec un bouton pour aller directement à Settings.app.

alt text

Si vous voulez savoir ce que ajoutez vous pouvez vérifier l'appel de délégué

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

L'erreur ici contient un code qui sera kCLErrorDenied si l'utilisateur ne laisse pas l'utilisation de l'application services de location.

De même, vous devez utiliser CoreLocation lorsque l'utilisateur en a besoin. Il n'est pas nécessaire de vérifier les services de localisation au lancement et la surcharge de plusieurs CLLocationManager est presque inexistante.

+0

Ensuite, je ne dois pas inclure de code dans le délégué de l'application et je n'ai pas besoin d'inclure une vérification dans les méthodes pour répondre à l'appui sur le bouton de localisation? Je dois juste déclarer dans une classe qui utilise le gestionnaire de localisation CLLocationManager et le lancer dans la méthode de chargement de la classe vue? Apple utilise le premier extrait dans l'exemple LocateMe. –

+0

Edité ma réponse! – gcamp

+0

Que faire avec l'affichage de l'emplacement de l'utilisateur sur la carte? Dois-je mettre à NON la visibilité de l'emplacement de l'utilisateur si l'utilisateur ne me permet pas d'obtenir sa position? –