Mettre en œuvre CLLocationManagerDelegate méthodes de Swift
J'ai essayé d'obtenir que cela fonctionne pour un certain temps maintenant, et je suis venu ici pour demander - comment puis-je faire avec l'aide de la CLLocationManagerDelegate méthodes de Swift? Je l'ai mis en haut de ma classe:
var locationManager = CLLocationManager()
J'ai mis le code suivant dans mon viewDidLoad
méthode:
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
Et j'ai essayé d'utiliser ces délégué méthodes en vain:
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!) {
locationReceived = true
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
locationReceived = false
}
J'ai aussi essayé d'utiliser @facultatif devant les fonctions, mais Xcode puis renvoie une erreur de compilateur. Des idées?
- Il semble fonctionner pour moi avec votre code, vous obtenez la boîte de dialogue vous demandant si votre application peut utiliser votre emplacement?
- Maintenant que vous le dites, je ne suis pas la boîte de dialogue. C'est un peu bizarre... je viens de vérifier les paramètres et l'application est donné l'autorisation d'accès aux données de localisation ainsi.
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le
NSLocationAlwaysUsageDescription
ouNSLocationWhenInUseUsageDescription
clé de votre plist si vous ne l'avez pas déjà, ils sont désormais obligatoires,iOS8+ requiert l'un de ces deux chaînes sont mis à utiliser les lieux. Celui que vous utilisez dépend de la façon dont vous avez l'intention de demander l'emplacement.
Utilisation
NSLocationAlwaysUsageDescription
pour les applications qui veulent utiliser l'appareil de l'emplacement même lorsque l'application n'est pas ouvert et utilisé.Utilisation
NSLocationWhenInUseUsageDescription
pour les applications qui veulent utiliser l'appareil de l'emplacement uniquement lorsque l'application est ouverte et en cours d'utilisation.Remarque: Lorsque vous ajoutez les cordes, avant de créer et d'exécuter, supprimer l'application sur votre appareil et de le laisser faire une nouvelle installation. Il semble que, si l'application a été autorisé à utiliser les lieux avant la mise à niveau vers iOS8 il ne demande pas la permission de nouveau et ne pas voir que vous définissez ces chaînes. Faire un supprimer et nettoyer l'installation de résoudre ce problème.
La définition de l'une des chaînes les invites un pop up sur l'installation/de la première utilisation le long des lignes de: "Permettre "ThisApp" pour accéder à votre position, même lorsque vous n'êtes pas en utilisant l'Application"
Voici un Capture d'écran de la plist fichier.
NSLocationAlwaysUsageDescription
semble être pour les applications qui veulent utiliser l'appareil de l'emplacement même lorsque l'application n'est pas ouvert et utilisé . Cela dit, la définition de l'une des chaînes les invites un pop up sur installer pour moi que les états: "Autoriser "ThisApp" pour accéder à votre position, même lorsque vous n'êtes pas à l'aide de l'Application" ....ce qui me semble bizarre.NSLocationWhenInUseUsageDescription
, merci!D'abord ajouter ce que deux lignes dans un fichier plist
1) NSLocationWhenInUseUsageDescription
2) NSLocationAlwaysUsageDescription
Pour obtenir de l'Emplacement Actuel de l'Utilisateur :-
Étape 1:
let locationManager = CLLocationManager() //make object of CLLocationManager class.
Étape 2:
In viewDidLoad instantiate the CLLocationManager class like,
//Pour une utilisation en arrière-plan
Étape 3: Maintenant de mettre en œuvre le délégué des méthodes de
CLLocationManager
Étape 4:
N'oubliez pas d'ajouter
NSLocationAlwaysUsageDescription
dans l'Info.plist comme dans iOS 8, il est obligatoire d'ajouter ce. Ce sera de demander la permission d'utiliser l'emplacement de l'utilisateur.J'ai eu le même problème. didUpdateLocations - n'a pas de travail. Exécutez votre application.
Aller à la page de Paramètres -> vie privée -> Emplacement et désactiver les Services de Localisation. didFailWithError de capture de l'erreur sur les absents les Services de Localisation. Puis l'allumer. Depuis ce moment, didUpdateLocations l'attraper par endroits.
C'est un peu un vieux thread, pourtant, aucun des ci-dessus a fonctionné pour moi sur Swift 2.2 xCode 7.3.1.
Le problème est que j'ai été en utilisant:
Et jamais cela ne m'a appelé. Quand j'ai changé pour:
Tout s'est bien déroulé. Semble que le délégué n'est pas appelé lors de l'utilisation de [AnyObject]