2016-06-11 2 views
4

Я строю на основе приложения к CoreLocation, которые, которые показывают пользователю их расположение на основе 6 параметров, таких как широта, долгота, точность по горизонтали, высота, вертикальная точность, пройденное расстояние ,Мой CoreLocation основе Swift приложение не спрашивая разрешения пользователя на доступ к местоположению

Предполагается, что пользователь должен сначала разрешить доступ к местоположению, но я попытался сбросить все настройки тренажера.

This is how my Main.storyboard look like

Серая часть будет заполнена с картой позже.

Это как мой View.Controller.swift выглядеть:

// Created by 16246 on 6/7/16. 
// Copyright © 2016 16246. All rights reserved. 
// 

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 
    private let LocationManager = CLLocationManager() 
    private var previousPoint:CLLocation? 
    private var totalMovementDistance:CLLocationDistance = 0 

    @IBOutlet var latitudeLabel: UILabel! 
    @IBOutlet var longitudeLabel: UILabel! 
    @IBOutlet var horizontalAccuracy: UILabel! 
    @IBOutlet var altitudeLabel: UILabel! 
    @IBOutlet var verticalAccuracyLabel: UILabel! 
    @IBOutlet var distanceTraveledLabel: UILabel! 



    override func viewDidLoad() { 
     super.viewDidLoad() 
     LocationManager.delegate = self 
     LocationManager.desiredAccuracy = kCLLocationAccuracyBest 
     LocationManager.requestAlwaysAuthorization() 


     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     print("Authorization Status Changed to \(status.rawValue)") 
     switch status { 
     case .Authorized, .AuthorizedWhenInUse: 
      LocationManager.startUpdatingLocation() 
     default: 
      LocationManager.stopUpdatingLocation() 
     } 
    } 

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
     let errorType = error.code == CLError.Denied.rawValue ? "Access Denied": "Error \(error.code)" 
     let alertController = UIAlertController(title: "Location Manager Error", message: errorType, preferredStyle: .Alert) 
     let okAction = UIAlertAction(title: "OK", style: .Cancel, handler: {action in}) 
     alertController.addAction(okAction) 
     presentViewController(alertController, animated: true, completion: nil) 
    } 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     let newLocation = (locations as [CLLocation]) [locations.count-1] 

     let latitudeString = String(format: "%g\u{00B0}", newLocation.coordinate.latitude) 
     latitudeLabel.text = latitudeString 

     let longitudeString = String(format: "%g\u{00B0}", newLocation.coordinate.longitude) 
     longitudeLabel.text = longitudeString 

     let horizontalAccuracyString = String(format: "%g\u{00B0}", newLocation.horizontalAccuracy) 
     horizontalAccuracy.text = horizontalAccuracyString 

     let altitudeString = String(format: "%g\u{00B0}", newLocation.altitude) 
     altitudeLabel.text = altitudeString 

     let verticalAccuracyString = String(format: "%g\u{00B0}", newLocation.verticalAccuracy) 
     verticalAccuracyLabel.text = verticalAccuracyString 

     if newLocation.horizontalAccuracy < 0 { 
      return 
     } 

     if newLocation.horizontalAccuracy > 100 || 
      newLocation.verticalAccuracy > 50 { 
       return 
     } 

     if previousPoint == nil { 
      totalMovementDistance = 0 
     } else { 
      totalMovementDistance += newLocation.distanceFromLocation(previousPoint!) 
     } 

     previousPoint = newLocation 

     let distanceString = String(format: "%gm", totalMovementDistance) 
     distanceTraveledLabel.text = distanceString 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

Это мой Info.plist файл:

enter image description here

Это мой Simulator :

enter image description here

Я хочу выход так:

enter image description here

я застрял на это, так как за последние 2 дня. Пинт пива для выродка, который помогает мне ладить с этим.

+0

Проверьте настройки приложения и убедитесь, что разрешение местоположение не имеет уже утвержден/отклонен – Paulw11

+0

У меня никогда не было этого всплывающего окна, чтобы разрешить/запретить службу определения местоположения. Я уже сбросил симулятор 100 секунд времени и попытался запустить, но все еще не смог увидеть всплывающее окно @ Paulw11 –

ответ

6

Переместить LocationManager.requestAlwaysAuthorization() в viewDidAppear метод.

EDIT:

Хорошо, вы просите requestAlwaysAuthorization но info.plist установить ввод ключа When in usage..., поэтому изменить requestAlwaysAuthorization к requestWhenInUseAuthorization

+0

У меня нет метода viewDidAppear в моем View.Controller.swift, хотя –

+1

просто переопределяет этот метод ... – tbilopavlovic

+0

попробовал это, но не имел никакой разницы 'override func viewDidAppear (анимированный: Bool) { LocationManager.requestAlwaysAuthorization() }' –