Я использую метод для создания менеджера местоположений, если он не существует, и запуска его.Он проверяет, отключены ли у пользователя службы определения местоположения, и соблюдает это, если только BOOL не предоставлен для запуска служб в любом случае.Метод возвращает BOOL, чтобы указать, были запущены службы или нет.
Это отлично работает для запуска службы и запроса пользователя в первый раз.Если они коснутся, разрешите все продолжить как обычно, а если коснитесь, не разрешите, я представлю представление для ввода местоположения вручную.
Однако я бы хотел, чтобы пользователь мог изменить свое мнение об использовании служб определения местоположения, поэтому яесть кнопка, чтобы позволить им вернуться к использованию GPS.Он снова вызывает ту же функцию, но на этот раз игнорирует предпочтения пользователей служб определения местоположения.Я полагаю, что это должно побудить пользователя снова разрешить / запретить, но вместо этого я получаю немедленный код ошибки kCLDenied.
На основе http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11 Я ожидаю другое приглашение пользователя, а не немедленную ошибку.
- (BOOL)startLocationServices:(BOOL)ignorePrefs
{
//
// /*UNREVISEDCOMMENTS*/
//
if (locationManager == nil)
{
if ([CLLocationManager locationServicesEnabled] || ignorePrefs)
{
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[locationManager setDistanceFilter:10.0];
}
else
{
return NO;
}
}
[locationManager startUpdatingLocation];
return YES;
}
(Мой делегат диспетчера местоположений освобождает и устанавливает диспетчер местоположений на ноль, если получена отклоненная ошибка.)