- Erreur [CLLocationManager requestWhenInUseAuthorization] ou - [CLLocationManager requestAlwaysAuthorization]
C'est mon code, en montrant à la fois l'alerte et le point bleu pour la position actuelle sur la carte:
MapName.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface MapName : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *MapName;
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
MapName.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
//Center the map
[self gotoLocation];
//Show current position
_MapName.showsUserLocation = YES;
}
J'ai ajouté la clé NSLocationWhenIsUseUsageDescription
comme une chaîne de caractères pour l'Info.plist.
Je suis toujours le même message d'erreur sur Xcode.
source d'informationauteur Max1980
Vous devez vous connecter pour publier un commentaire.
Elle est due à la fois:
et
Vous devez vérifier si l'utilisateur a donné son autorisation avant de vous appeler. Aussi assurez-vous de désactiver l'Emplacement de l'Utilisateur dans le MKMapKit sur la table de montage séquentiel (il m'a fallu des jours pour traquer).
Faire quelque chose comme:
En fonction de votre application, vous ne voulez pas de demander l'autorisation de l'utilisateur sur le lancement puisque ce n'est pas recommandé.
Le message d'erreur est assez littéral. Ne l'appelez pas
[self.locationManager startUpdatingLocation]
jusqu'à ce que vous avez l'autorisation. Votre[self.locationManager requestWhenInUseAuthorization]
par les docs, est asynchrone.Cela signifie que vous êtes à la fois d'une demande d'accès ainsi que le démarrage de votre analyse à la même heure.
Au lieu de cela, essayez de la mise en œuvre de
-[CLLocationManagerDelegate locationManager:didChangeAuthorizationStatus:]
et de commencer votre analyse après il a été déterminé que vous avez l'autorisation.Sur swift :
N'oubliez pas d'ajouter dans Info.plist fichier de ces touches:
Le mot-clé dans le fichier info ("Dans le" au lieu de "Est"):
De cette façon fonctionne sans erreurs sur Xcode6:
AppDelegate.h
AppDelegate.m
Le message d'alerte s'affiche lorsque vous ouvrez l'application pour la première fois
Basé hors de Jérôme réponse, j'ai traduit la réponse qui a fonctionné pour moi à Swift.
Note: D'après ce que j'ai lu dans les documents, il n'y a pas de
kCLAuthorizationStatusAuthorized
équivalent en Swift.