MapKit dans iOS 8 et rapide
Je suis en train d'utiliser MapKit sur iOS 8 et je reçois l'erreur:
Trying to start MapKit location updates without prompting for location authorization. Must call
-[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager
requestAlwaysAuthorization] first.
Regarder ici, j'ai trouvé que j'ai eu à mettre en œuvre NSLocationWhenInUsageDescription
dans mon plist et aussi faire un appel à locationManager.requestWhenInUseAuthorization()
mais rien ne se passe et j'obtiens toujours cette erreur dans la console. Ce que je fais mal?
NSLocationWhenInUsageDescription
est la mauvaise touche. Utilisation NSLocationWhenInUseUsageDescription
.
OriginalL'auteur Phil | 2014-06-08
Vous devez vous connecter pour publier un commentaire.
Dans mon application délégué, j'ai fait une option var pour la locationManager à l'extérieur de la classe et puis définissez
Cela provoque l'affichage des alertes de pop up avec votre NSLocationWhenInUseUsageDescription ou NSLocationAlwaysUsageDescription si vous changer de manière appropriée.
Puis dans la vue contrôleur de fichier j'ai fait un autre var en dehors de la classe afin de conserver un local CLLocationManager. J'ai ensuite mis
Vous pouvez ensuite utiliser la méthode du délégué
qui est appelée lorsque l'autorisation des changements de statut, ce qui n'est lorsque l'utilisateur répond à la pop up. À l'intérieur de cela, vous pouvez utiliser ce bout de code à mettre l'utilisateur localisation sur la carte
va ajouter les utilisateurs de l'emplacement pour la carte que si vous êtes autorisé pour lors de l'utilisation.
Je pense que cela ne vous invite la première fois que vous ouvrez l'application, donc vous devez les supprimer à partir du simulateur ou périphérique ou d'aller dans les paramètres et permettre à l'emplacement
Qui n'a pas fonctionné et l'application n'a même pas sous les paramètres de localisation.
Dans mon AppDelegate.swift j'ai le texte suivant:
import CoreLocation var locManager: CLLocationManager? @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate{ var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { // Override point for customization after application launch. locManager = CLLocationManager() locManager!.requestWhenInUseAuthorization() return true }
Et de l'avis du contrôleur:
var locMan: CLLocationManager? class ViewController: UIViewController, CLLocationManagerDelegate { @IBOutlet var map : MKMapView override func viewDidLoad() { super.viewDidLoad() if locManager { locMan = locManager! locMan!.delegate = self } } func locationManager(_manager: CLLocationManager!, didUpdateLocations locations: AnyObject[]!){ self.map.showsUserLocation = true }
OriginalL'auteur Robert Mcc
J'ai été gêné par un, jusqu'à ce que j'ai réalisé que la
info.plist
clé a changé. Si vous aviezNSLocationUsageDescription
, vous aurez besoin de changerNSLocationAlwaysUsageDescription
ouNSLocationWhenInUseUsageDescription
(au moins un àYES
), il est maintenant obligatoire dans iOS8.Et puis, Robert de code fonctionne, comme il se doit (merci pour le partage).
OriginalL'auteur David Mendels
Il est NSLocationWhenInUseUsageDescription, pas NSLocationWhenInUsageDescription. La plupart des endroits en ligne ont la mauvaise touche
OriginalL'auteur Jonathan Brown