2015-11-14 1 views
0

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

В моем приложении, я ввода ниже строк кода:

override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     if CLLocationManager.authorizationStatus() == CLAuthorizationStatus.Denied { 
      self.locationAlert = UIAlertView(title: "Location Services Permission Needed", message: "Location service needs to be turned on to use Peek! Please press setting button below and turn the service on!", delegate: self, cancelButtonTitle: "Settings") 
      locationAlert.show() 
     } 
    } 

    extension ViewController: UIAlertViewDelegate { 
     func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) { 
      alertView.dismissWithClickedButtonIndex(buttonIndex, animated: true) 
      UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!) 
     } 
    } 

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

Есть ли способ сделать это?

ответ

2

Вы можете использовать метод делегата от CLLocationManagerDelegate:

- (void)locationManager:(CLLocationManager *)manager 
didChangeAuthorizationStatus:(CLAuthorizationStatus)status 

Этот метод говорит вам, если статус авторизации местоположения имеет изменилось.

Пример:

func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    switch status { 
    case .Denied: 
     // Changed status to denied 
     break; 
    default: 
     break; 
    } 
} 

Примечание: Не забудьте установить делегат CLLocationManager самостоятельно! Также лучше проверить, не отображается ли это представление предупреждения, чтобы избежать нескольких предупреждений.

+0

Спасатель жизни! Это сработало. Спасибо огромное! – Kahsn