2014-10-10 4 views
0

Когда я пытаюсь показать местоположение пользователя на моей карте, он показывает, что местоположение находится где-то в океане (lat = 0.000, lon = 0.000), я установил смоделированное местоположение в Лондон и все еще ничего.Приложение iOS получает недопустимое местоположение пользователя

Когда я пытаюсь скомпилировать приложение на своем iphone, он не запрашивает разрешения на получение текущего местоположения пользователя, только когда я включаю приложение для использования служб определения местоположения в настройках iphone, приложение показывает текущее местоположение пользователя.

любая идея, почему это так? это мой viewDidLoad:

_locationManager = [[CLLocationManager alloc] init]; 
_locationManager.delegate = self; 
_locationManager = [[CLLocationManager alloc] init]; 
if(IS_OS_8_OR_LATER) { 
    [_locationManager requestWhenInUseAuthorization]; 
    [_locationManager requestAlwaysAuthorization]; 
} 
_locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
_locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[_locationManager startUpdatingLocation]; 
+0

Являетесь ли вы iPhone под управлением iOS 7 или 8? – Undo

+0

Добавить ключ 'NSLocationWhenInUseUsageDescription' в ваш файл info.Plist –

+0

Я запускаю 7 на моем iphone и 8 на симуляторе, я уже добавил описание, любые другие идеи? –

ответ

0

Там нет необходимости добавлять как оба они делают разные вещи

[_locationManager requestWhenInUseAuthorization]; 
[_locationManager requestAlwaysAuthorization]; 

requestWhenInUseAuthorization

использовать [_locationManager requestWhenInUseAuthorization]; когда вы хотите получать обновления местоположения, когда приложение активна в режиме переднего плана, а не в фоновом режиме.

requestAlwaysAuthorization

использования [_locationManager requestAlwaysAuthorization]; когда вы хотите получить обновление местоположения Даже если ваше приложение работает в фоновом режиме. Так OS будет просить разрешения соответственно

Добавление ключей к info.plist

Теперь mandetory добавить либо NSLocationWhenInUseUsageDescription или NSLocationAlwaysUsageDescription ключ к вашему info.plist в зависимости от которых разрешение вы просите.

Значение для этого ключа должен быть NSString объяснить пользователю, почему приложение хочет использовать услуги определения местоположения что-то вроде «Нам нужно ваше местоположение XYZ причине»

Если IOS не найти выше ключа в файле Plist, он будет игнорировать запрос местоположения. Надеюсь, это поможет. Кстати, я рекомендую вам посмотреть видео WWDC 2014 «Что нового в Core Location», все изменения iOS8 были хорошо объяснены.

Другие изменения в Кодексе

Также еще одна вещь, которую я вижу в вашем коде, вы создаете новый экземпляр _locationManager в 3-й строке, означает, что вы создаете новый объект после назначения делегата locationManager, не следует делать это тоже.

+0

ну сначала спасибо за ответ! но я видел изменения, которые нужно было сделать при смене на ios 8, но я не сказал, что я изменился на ios 8, приложение не показывает местоположение пользователя на ios 7 или 8, и я добавил описание. так что, любая идея, почему она не просит разрешения на размещение? –

+0

Возможно, вы снова создаете новый объект locationManager после назначения ему делегата, чтобы это могло вызвать проблему. –

+0

после удаления нового менеджера местоположений он запрашивает у меня (в устройстве) разрешение на местоположение, но когда я нахожусь в порядке, он ничего не делает, и мне нужно вернуться к настройкам. в симуляторе его та же проблема –

Смежные вопросы