Подтвердить что ты не робот

IOS 9 Error Domain = kCLErrorDomain Code = 0 "(null)"

Код ниже должен получить текущее местоположение. Но выше возникает ошибка. Функция didUpdateLocations никогда не вызывается.

Запуск этого устройства (iPhone 5s) iOS 9.1. Info.plist имеет необходимые возможности устройства и конфиденциальность. Описание использования местоположения сконфигурировано так, как показано на прилагаемом изображении. Пожалуйста помоги!

let locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    locationManager.delegate = self
    locationManager.requestAlwaysAuthorization()
    locationManager.requestLocation()
}


func locationManager(manager: CLLocationManager,
    didFailWithError error: NSError) 
    print(error.description)
}

func locationManager(manager: CLLocationManager, didUpdateLocations
      locations: [CLLocation]) {        
 print("got location")
}

Info.plist

4b9b3361

Ответ 1

Пожалуйста, попробуйте следующее:

Перейдите к:

  • Product → Scheme → Edit Scheme → Options → Allow Location Simulation необходимо проверить и попытаться предоставить местоположение по умолчанию, не оставляйте его равным "none"

EDIT: как указано в комментариях, перезапустите Xcode и вы закончите!

Надеюсь, что это поможет.

Ответ 2

Если оповещение авторизации местоположения не появляется для вас, попробуйте добавить NSLocationAlwaysUsageDescription к вашему plist как строку типа. Также сделайте то же самое для NSLocationWhenInUseUsageDescription.

Ответ 3

поиск google true ответов это кажется проблемой с IOS4.0.

в XCODE 7.1 в схеме Project = > schem = > edit.

в разделе "Выполнить" = > "Параметры" = > "Расположение/запрет ядра". "Разрешить размещение".

в вашем симуляторе IOS в разделе Debug = > Местоположение выберите местоположение. Это устранило проблему для меня.

Ответ 4

У меня была такая же проблема с приложением, что я двигался с 8.0 → 9.0/9.1. Я попробовал пару вещей, например, написать часть CLLocationManager только в Swift и новый проект Obj-C. Я также тестировал его на разных устройствах. Чтобы решить проблему на устройстве, я удалил функцию didFailWithError. Который полностью останавливает ошибку. Это может показаться не лучшей идеей, но в IOS9 вы можете ограничить свое приложение устройствами, которые имеют GPS или Location-Services. Android делает это очень долго. Я также заметил, что в вашем .plist у вас нет разрешений для NSLocationALwaysUsageDescription или включенных свойств NSLocationWhenInUseUsageDescrtiption.

Просто для справки Я приложил то, что выглядит мой текущий .plist, и не запускает эту ошибку, а также фрагмент кода в obj-c файле контроллера. Код начинается с самого конца предыдущей функции, а затем закомментирован делегат didFailWithError и didUpdateLocations. В настоящее время это успешно работает в IOS 9.1

       //Get map authorization
    [CLLocationManager locationServicesEnabled];
    locationManager = [[CLLocationManager alloc]init];
    locationManager.delegate = self;
    locationManager.allowsBackgroundLocationUpdates = YES;
    if(nil == locationManager) locationManager = [[CLLocationManager alloc]init];
    if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [locationManager requestAlwaysAuthorization];
    }
    //locationManager.distanceFilter=10;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];



//- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
//{
//    NSLog(@"didFailWithError: %@", error);
//    UIAlertView *errorAlert = [[UIAlertView alloc]
//                               initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
//    [errorAlert show];
//}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{


    NSLog(@"LocationUpdated: %@",[locations lastObject]);
    [self updateMapMarkers];

//    NSDate* eventDate = location.timestamp;
//    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
//    if(fabs(howRecent) < 15.0){
//        [self updateMapMarkers];
//    }

}

. plist image

Ответ 5

У меня есть эти предложения для людей, использующих карты Apple в своем приложении.

  • Не ретранслировать результаты симулятора, потому что всегда он не даст точных результатов.
  • Для всех отладочных и тестовых тестов, связанных с картами, на реальных устройствах.
  • Как и в xcode 8 (насколько мне известно), вы можете просто подключить свое устройство iOS к системе и запустить приложение напрямую.
  • Даже для вышеупомянутой проблемы решение такое же, просто попробуйте с реальными устройствами, ваша проблема будет решена.

Ответ 6

Попробуйте это из Simulator → Debug → Location

enter image description here