web-dev-qa-db-fra.com

IOS 9 Domaine d'erreur = Code kCLErrorDomain = 0 "(null)"

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”)
}

 Info.plist

29
Tusshu

S'il vous plaît essayez ceci: 

Aller à : 

  • Produit -> Schéma -> Modifier le schéma -> Options -> Autoriser la simulation d'emplacement doit être coché et/ essayez de fournir un emplacement par défaut, ne le laissez pas défini sur "aucun"

EDIT: Comme mentionné dans les commentaires, redémarrez également Xcode et vous avez terminé!

J'espère que cela t'aides.

42
H4Hugo

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.

3
user5516570

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.

3
DustPhyte

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];
//    }

}

 .plist image

2
Big Kahuna

J'ai ces suggestions pour les personnes utilisant des cartes Apple dans leur application

  1. Ne pas relayer sur les résultats du simulateur, car il ne donnera toujours pas des résultats exacts.
  2. Pour tous les tests d’exécution et de débogage liés à la carte sur des appareils réels.
  3. Comme dans xcode 8 (à ma connaissance), vous pouvez simplement connecter votre appareil iOS au système et exécuter l'application directement.
  4. Même pour le problème ci-dessus, la solution est la même, essayez avec de vrais appareils, votre problème sera résolu.
0
user6698531

Essayez ceci depuis le simulateur -> Debug -> Location

 enter image description here

0
PrimeDime