2015-03-02 2 views
1

Я пытаюсь получить широту и долготу iPhone для целей перехода к внешней функции, чтобы что-то геотегировать. Однако я был довольно неудачным. Вот код, с которым я сейчас работаю.Получение iPhone Latitude & Longitude

let locationManager = CLLocationManager() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.locationManager.requestAlwaysAuthorization() 
    self.locationManager.requestWhenInUseAuthorization() 
} 

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

@IBAction func findMyLocation (sender:AnyObject) 
{ 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.startUpdatingLocation() 
} 

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) 
{ 
    CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error)->Void in 

     if error == nil 
     { 
      println("Reverse geocoder failed with error " + error.localizedDescription) 
      return 
     } 

     if placemarks.count > 0 
     { 
      let pm = placemarks[0] as CLPlacemark 
      self.displayLocationInfo(pm) 
     } 
     else 
     { 
      println("Problem with the data received from geocoder") 
     } 
    }) 
} 

func displayLocationInfo(placemark: CLPlacemark) { 
     //stop updating location to save battery life 
     locationManager.stopUpdatingLocation() 
    if (placemark.postalCode != nil) 
    { 
     println(placemark.postalCode) 
     println("just tried to print placemark's postal code") 
    } 
     //println(placemark.locality ? placemark.locality : "") 
     //println(placemark.postalCode ? placemark.postalCode : "") 
     //println(placemark.administrativeArea ? placemark.administrativeArea : "") 
     //println(placemark.country ? placemark.country : "") 
} 

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) 
{ 
    println("Error while updating location " + error.localizedDescription) 
} 

На данный момент я почти ничего не получаю, когда запускаю программу. У меня есть маленькая кнопка, которая говорит «Find Me», и при нажатии ничего не появляется в окне вывода. У меня есть местоположение отладки iOS Simulator, установленное на «Apple», и я ранее пробовал всегда предоставлять услуги определения местоположения в настройках симулятора при попытке запустить программу (хотя в настоящее время она не показывает мое приложение и возможность сделать это). Я просто хочу получить двойное значение для широты и долготы, и если есть простое, что было бы здорово.

ответ

0
  1. Вы должны запросить только один вид авторизации. Выберите тот, который наиболее удобен для пользователя вашего приложения.

  2. Возможно, вам не хватает вашей целевой строки, которая теперь требуется для активации служб определения местоположения. Добавьте одну из следующих клавиш, чтобы ваш Info.plist:

    • NSLocationAlwaysUsageDescription - при запросе Всегда разрешения
    • NSLocationWhenInUseUsageDescription - при запросе WhenInUse разрешение

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

+0

Я очень новичок в XCode - как именно я могу добавить один из этих ключей? Как это выглядит и куда оно идет? – Xianthia

+0

Должна быть папка, называемая поддерживающими файлами. Там есть файл с именем target-Info.plist, где target - это имя целевого приложения вашего проекта. Вы добавляете пару ключ/значение в этот файл. Если вы новичок в Xcode, я предлагаю вам прочитать некоторые из руководств и руководств, чтобы узнать об этом, прежде чем обращаться за помощью. Трудно помочь тем, кто не понимает жаргон. –

Смежные вопросы