2015-02-16 2 views
0

Я хочу получить местоположение внутри пользовательского делегата в swift. Обратите внимание, что это отлично работало 2 часа назад. Основная проблема заключается в том, что оповещение авторизации местоположения исчезает самостоятельно, прежде чем я смогу разрешить это. Поэтому я попытался войти в настройки и разрешить, но это не сработает. Почему alertView исчезает сам, и почему, хотя я разрешил его с помощью настроек, я до сих пор не могу получить обновление? Я добавил правильный ключ в plist, а также добавил в файл делегат и структуру CoreLocation. Также обратите внимание, что didFail не вызывается в любой момент. Любые рекомендации будут оцененыМенеджер местоположения не обновляет местоположение в быстром режиме. AlertView исчезает

func getLocation(){ 
    println("called") 
    let locationManager:CLLocationManager = CLLocationManager() 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 

    let status = CLLocationManager.authorizationStatus() 
    println(status.rawValue) 

    if(status != CLAuthorizationStatus.Authorized) { 
     locationManager.requestWhenInUseAuthorization() 
     println("called2") 
    }else{ 
     locationManager.startUpdatingLocation() 
     println("allowed and updating") 
    } 




} 



func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    println("updating") 

    var locationArray = locations as NSArray 
    var locationObj = locationArray.lastObject as CLLocation 

    println(locationObj) 

} 

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



func locationManager(manager: CLLocationManager!, 
    didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
     var shouldIAllow = false 
     println(status) 
     switch status { 
     case CLAuthorizationStatus.Restricted: 
      println("Restricted Access to location") 
     case CLAuthorizationStatus.Denied: 
      println("User denied access to location") 
     case CLAuthorizationStatus.NotDetermined: 
      println("Status not determined") 
     default: 
      println("Allowed to location Access") 
      shouldIAllow = true 
     } 

     if (shouldIAllow == true) { 
      manager.startUpdatingLocation() 
     } else { 
      println("Denied access: \(status)") 
     } 
} 

ответ

2

Создать свойство из locationManager, потому что таким образом он будет уничтожен после того, как вы запустите ваш метод. И не забудьте настроить его делегат, например, в viewDidLoad.

+0

Ну, я получил его для работы в соответствии с вашими инструкциями, но также удалив его из моего пользовательского делегата, который поднимает мой вопрос: Does locationManager updateLocations должен быть в основном потоке? Я имею в виду, что он работал отлично, как 3 часа назад через пользовательский делегат. – snksnk

+0

@snksnk Я не уверен, что вы подразумеваете под «отстранением от моего пользовательского делегата». И что вы подразумеваете под заказным делегатом? И отвечая на ваш вопрос: updateingLocations запускается в основном потоке, поэтому он находится в основном потоке. –

+0

Я создал делегат, который вызывается через mainViewController, и через этого делегата я хочу обновить Местоположение – snksnk

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