CLLocationManager autorisation problème iOS 8
Je suis en train de travailler sur un morceau de code Swift pour iOS 8. Je suis en train de faire quelque chose qui implique l'emplacement, et j'ai donc mis en œuvre à la suite de mon point de vue de swift contrôleur de fichier:
let locationManger:CLLocationManager = CLLocationManager()
var speedReceived:Double = 0
override func viewDidLoad() {
super.viewDidLoad()
locationManger.delegate = self
locationManger.desiredAccuracy = kCLLocationAccuracyBest
let authstate = CLLocationManager.authorizationStatus()
if(authstate == CLAuthorizationStatus.NotDetermined){
println("Not Authorised")
locationManger.requestWhenInUseAuthorization()
}
//Do any additional setup after loading the view, typically from a nib.
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!){
var location:CLLocation = locations[locations.count - 1] as CLLocation
if(location.horizontalAccuracy > 0){
self.speedReceived = location.speed
println(self.speedReceived)
}
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("Couldn't get your location")
}
Cependant, je n'arrive pas à obtenir ce code fonctionne. Il n'enregistre pas ma préférence pour l'utilisation de la localisation. il n'a même pas me demander de donner un permis pour accéder à l'emplacement. J'ai essayé de mettre à jour mes infos.plist. Mais cela ne fonctionne pas. Btw, si je sélectionne toujours dans les paramètres de confidentialité dans le simulateur, il fonctionne si je passe à l'application immédiatement. quelqu'un peut-il aider? Je suis sûr que c'est ça le problème parce que je suis Pas Autorisé sur ma console.
Toute aide?
locationManager.requestWhenInUseAuthorization()
, pas seulement lorsque votre statut est non autorisésOriginalL'auteur brisi123 | 2014-07-10
Vous devez vous connecter pour publier un commentaire.
C'est une version d'iOS 8 sur la question. Vous devez mettre
NSLocationAlwaysUsageDescription
ouNSLocationWhenInUseUsageDescription
clés dans votre.plist
fichier (valeur peut être un autre message qui sera présenté dans l'emplacement d'alerte). Ces clés sont nécessaires dans iOS 8.La façon dont il est dit dans l' Les directives Apple:
OriginalL'auteur Alex Peda
J'avais lutté avec un problème similaire, qui a persisté même après l'ajout de la NSLocationAlwaysUsageDescription/NSLocationWhenInUseUsageDescription clés de la plist.
Finalement, j'ai ajouté la "protection des renseignements personnels Emplacement de la Description de l'Utilisation de la" clé à la plist (en plus les nouvelles clés) et le tour est joué, il a travaillé! Après avoir travaillé une fois que j'ai été en mesure de supprimer la mention "vie privée - Lieu Description de l'Utilisation de la" clé de la plist et de poursuivre avec succès en demander l'autorisation.
OriginalL'auteur Cole Richards
iOS 8 a changé d'emplacement d'autorisation de stratégie. Solution avec compatibilité ascendante:
Rappel: le programme d'installation NSLocationWhenInUseUsageDescription clé dans votre Info.plist
OriginalL'auteur hrchen
J'ai eu exactement le même problème.
Pour l'enregistrement, ce n'est pas la réponse officielle. La première réponse est la bonne. Je voulais juste ajouter un lien vers un FOSS (Objective-C) de projet qui illustre le correctif.
Comme indiqué, j'ai dû ajouter de la clé. Mon application n'a pas besoin de s'exécuter en arrière-plan, j'ai donc ajouté le NSLocationWhenInUseUsageDescription clé de mon info.plist.
Si vous ajoutez une chaîne de caractères comme la valeur de cette clé (en option -l'existence de la clé est assez pour mettre de la barre), alors que la chaîne s'affiche dans l'autorisation popup.
Ensuite, j'ai ajouté le code suivant avant tous mes [CLLocationManager startUpdating] appelle:
La respondsToSelector est important, comme l'appel n'est disponible que sous iOS 8.
La première fois, ceci est appelé, l'alerte est affiché. Après cela, il tombe à travers.
Remarque que j'appelle requestWhenInUseAuthorization
Il doit correspondre à la valeur que j'ai mis dans le fichier plist. Je suppose que vous pourriez mettre les deux, mais je ne sais pas. Je n'ai pas besoin d'.
Le projet est ici. La plupart des travaux (pas beaucoup) est dans la BMLTAppDelegate.m fichier.
C'est une mauvaise surprise. Beaucoup de gens n'ont aucune idée que leurs applications pourront arrêter de travailler dans iOS 8. Ils vont faire la même chose au départ, j'ai fait: Donner un rapide passage dans le simulateur, note le coup, et la craie jusqu'à une beta bug.
Maintenant, j'ai un autre problème: Toutes mes applications sont fixes, mais Xcode se bloque lorsque j'essaie de télécharger les apps de l'App Store. J'ai un RADAR.
Xcode 6 est un peu grinçante. J'attends un patch pour sortir assez rapidement.
OriginalL'auteur Little Green Viper
Car je n'aime pas à modifier le fichier plist directement, j'ai toujours accorder l'autorisation par l'aide de l'INTERFACE utilisateur.
Les textes néerlandais "Toegang est nécessaire" et "Toegang est noodzakelijk" sont affichés dans la même fenêtre, dans laquelle l'utilisé les dons d'accès. Vous pouvez modifier à n'importe quel texte que vous aimez.
Simplement ajouter à plist source,
OriginalL'auteur Vincent
Pour Swift 2 j'ai remplacé le respondsToSelector() vérifier avec la version iOS de vérifier. Pas élégant, mais c'est nécessaire pour Xcode 7 à 0 erreurs, avertissements 0
OriginalL'auteur Carl