Le code ci-dessous devrait avoir l'emplacement actuel. Mais l'erreur ci-dessus est générée. La fonction didUpdateLocations n'est jamais appelée.
Exécution sur un appareil (iPhone 5s) iOS 9.1. Info.plist a les capacités de périphérique requises et la confidentialité - La description de l'utilisation de l'emplacement est configurée comme indiqué dans l'image jointe. S'il vous plaît aider!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.requestLocation()
}
func locationManager(manager: CLLocationManager,
didFailWithError error: NSError)
print(error.description)
}
func locationManager(manager: CLLocationManager, didUpdateLocations
locations: [CLLocation]) {
print(“got location”)
}
S'il vous plaît essayez ceci:
Aller à :
EDIT: Comme mentionné dans les commentaires, redémarrez également Xcode et vous avez terminé!
J'espère que cela t'aides.
Si l'alerte d'autorisation d'emplacement ne s'affiche pas pour vous, essayez d'ajouter NSLocationAlwaysUsageDescription à votre plist en tant que chaîne de type. Faites de même pour NSLocationWhenInUseUsageDescription.
recherche google true les réponses cela semble être un problème depuis IOS4.0.
dans XCODE 7.1 sous Projet => schéma => modifier le schéma.
sous Exécuter => Options => Emplacement principal/Désactivez l'option Autoriser la simulation d'emplacement.
dans votre IOS simulateur sous emplacement de débogage => sélectionnez un emplacement. Cela a résolu le problème pour moi.
J'avais le même problème avec une application que je passais de 8.0 -> 9.0/9.1. J'ai essayé quelques choses comme écrire la partie CLLocationManager uniquement dans Swift et un nouveau projet Obj-C. Je l'ai aussi testé sur différents appareils. Pour résoudre le problème sur le périphérique, j'ai supprimé la fonction didFailWithError. Ce qui arrête complètement l'erreur. Cela ne semble peut-être pas la meilleure idée, mais dans IOS9, vous pouvez limiter votre application aux périphériques dotés d'un GPS ou de services de localisation. Android le fait depuis très longtemps. J'ai également remarqué que, dans votre .plist, les autorisations ne sont pas activées pour les propriétés NSLocationalwaysUsageDescription ou NSLocationWhenInUseUsageDescrtiption incluses.
Juste pour référence, j'ai joint à quoi mon .plist actuel ressemble, cela ne déclenche pas cette erreur ainsi qu'un bloc de code dans obj-c le fichier du contrôleur. Le code commence à la toute fin d'une fonction précédente, puis comporte le délégué didFailWithError mis en commentaire et les didUpdateLocations. Cela fonctionne actuellement avec succès dans IOS 9.1.
//Get map authorization
[CLLocationManager locationServicesEnabled];
locationManager = [[CLLocationManager alloc]init];
locationManager.delegate = self;
locationManager.allowsBackgroundLocationUpdates = YES;
if(nil == locationManager) locationManager = [[CLLocationManager alloc]init];
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[locationManager requestAlwaysAuthorization];
}
//locationManager.distanceFilter=10;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
//- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
//{
// NSLog(@"didFailWithError: %@", error);
// UIAlertView *errorAlert = [[UIAlertView alloc]
// initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
// [errorAlert show];
//}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
NSLog(@"LocationUpdated: %@",[locations lastObject]);
[self updateMapMarkers];
// NSDate* eventDate = location.timestamp;
// NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
// if(fabs(howRecent) < 15.0){
// [self updateMapMarkers];
// }
}
J'ai ces suggestions pour les personnes utilisant des cartes Apple dans leur application