2014-10-17 2 views
4

Я пытаюсь создать простое приложение, которое обнаруживает область, в которой находится кто-то, но я застрял, потому что ни один из методов CLLocationManagerDelegate не вызывается, когда приложение запускается и находит местоположения.CLLocationManagerDelegate методы, которые не вызываются в коде Swift

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

Вот что я до сих пор -

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

@IBOutlet weak var locationLabel : UILabel! 

var locationManager = CLLocationManager() 
let geocoder = CLGeocoder() 

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

    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.startUpdatingLocation() 
} 

override func viewDidDisappear(animated: Bool) { 
    locationManager.stopUpdatingLocation() 
} 

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

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    geocoder.reverseGeocodeLocation(locations.last as CLLocation, completionHandler: {(placemark, error) in 
    if (error != nil) { 
     println("Error") 
    } else { 
     let pm = placemark.first as CLPlacemark 

     println(pm) 
    } 
    }) 
} 

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) { 
    println("Epic Fail") 
    } 
} 

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

+0

Возможно, дубликат http://stackoverflow.com/questions/24063798/cllocation-manager-in-swift-to-get-location-of-user – kabarga

ответ

2

попытка вызова

func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) 

вместо делегата вызова вы делаете сейчас ... У меня были проблемы с:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) 

Aswell. Но использование вышеуказанного делегированного вызова устранило мою проблему.

Редактировать (не читал вопрос правильно ...)

Вы никогда не спрашивать разрешения, поэтому вы не получите всплывающее окно. Звоните следующее: locationManager.requestWhenInUseAuthorization()

Это очень важный шаг, и ваше приложение не будет работать, если вы не задали пользователя для авторизации вашего приложения

Это также важно, чтобы добавить NSLocationWhenInUseUsageDescription к ваш файл .plist, если вы используете iOS8.

Скриншот:

enter image description here

+0

Спасибо за ответ. Я дал оба предложения попробовать, и я все еще вижу тот же результат, что и методы, вызываемые, и запрос на авторизацию. Я добавлю, что я запускаю это на устройстве, а не на симуляторе. –

+2

Ok @Mark Reid, в какой версии iOS вы работаете? Помните, что вам нужно добавить следующий ключ/значение.plist file: 'NSLocationWhenInUseUsageDescription':« Мне нужно использовать ваше местоположение для этого, и другое » – Chris

+0

Это iOS 8, и это проблема, с которой я столкнулся. Благодарю. –

0

Следующий вопрос ответ и ответ дал мне решение мне нужно.

CLLocationManager authorization issue iOS 8

В конце концов, если вы работаете на прошивке, то вы должны добавить ключ

NSLocationAlwaysUsageDescription (при запросе данных о местоположении, чтобы быть всегда в наличии)

ИЛИ

NSLocationWhenInUseUsageDescription (когда запрашивая использовать данные о местоположении только в том случае, когда ваше приложение работает)

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

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