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]()
Ответы
Ответ 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]()