Я использую метод создания менеджера местоположений, если он не существует и запускает его. Он проверяет, отключен ли пользователь с помощью служб определения местоположения, и соблюдает ли это, если BOOL не будет предоставлен для запуска служб в любом случае. Метод возвращает BOOL, чтобы указать, что службы были запущены или нет.CLLocation Manager не запрашивает пользователя
Это прекрасно подходит для запуска службы и запроса пользователя в первый раз. Если они касаются, чтобы все происходило как обычно, и если они касаются, то я не могу представить представление для ввода местоположения вручную.
Однако я хотел бы, чтобы пользователь мог изменить свое мнение об использовании служб определения местоположения, поэтому у меня есть кнопка, позволяющая им вернуться к использованию 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;
}
(мой менеджер местоположения делегата релизы и устанавливает менеджер местоположения к нулю, если получена недопущенная ошибка.)
хороший вопрос. У меня такая же проблема. – hop