J'essaie d'utiliser l'emplacement de l'utilisateur sur mon application iOS. L'application fonctionne sur iOS 7 mais pas sur iOS 8.iOS 8.1 CoreLocationManager requestWhenInUseAuthorization n'invite pas AlertView
J'ai tout essayé. Lisez un tas de tutoriels et je sais que dans l'iOS 8, nous devons appeler la méthode requestWhenInUseAuthorization et ajouter la clé NSLocationWhenInUseUsageDescription dans Info.plist.
Mais cela ne fonctionne toujours pas, il ne demande pas la permission de l'utilisateur, je suis en train de tester dans un vrai appareil (un iPhone 5c sous iOS 8.1.x). J'ai essayé de réinstaller l'application plusieurs fois.
Ce sont les codes d'un très très très petit projet que j'ai créé pour tester cette chose.
Mon ViewController.m
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController() <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLHeadingFilterNone;
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
NSLog(@"Pôde chamar o método"); // It could call the method
[self.locationManager requestWhenInUseAuthorization];
}
// [self.locationManager startUpdatingLocation];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
NSLog(@"Atualizou Localização para: %@", [locations lastObject]); // Updated the location to
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"Location Manager falhou com erro: %@", error); // Location manager failed with error
}
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorized) {
[self.locationManager startUpdatingLocation];
}
}
@end
Mon Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>wallace.$(PRODUCT_NAME:rfc1034identifier)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
</dict>
</plist>
Quelqu'un sait comment comprendre cela?
Juste pour confirmer, est-ce qu'il entre dans l'instruction 'if' où vous demandez une autorisation et enregistre le" Pôde chamar o método "? Et quand vous dites "ça ne marche pas", voulez-vous dire qu'il ne demande jamais d'autorisation? Ou il ne suit pas l'emplacement correctement? Si cela ne vous est pas proposé, vérifiez votre application de configuration pour vous assurer qu'elle n'est pas déjà autorisée et que les services de localisation sont activés. – Stonz2
L'instruction if est satisfaite. Avec "ne fonctionne pas", je veux dire qu'il ne lance pas la permission de l'utilisateur demandant AlertView. Et la méthode locationManager: didChangeAuthorizationStatus: est appelée une fois avec la valeur d'état kCLAuthorizationStatusNotDetermined – Wallace
Envisagez d'ajouter une valeur de chaîne à 'NSLocationWhenInUseUsageDescription' dans votre requête. Je pense que vous devez fournir du texte que l'utilisateur verra lorsque l'alerte est affichée. – Stonz2