IOS 8 Mapview Текущее местоположение не срабатывает

MKMapview текущее местоположение пользователя не срабатывает в iOS-8, предыдущие iOS-7 и iOS-6 работают нормально.

     self.mapView.delegate = self;
     self.mapView.showsUserLocation =YES; 

В этой строке для автоматического вызова методов делегирования текущего местоположения пользователя

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

но он не срабатывает в iOS-8.

Ответ 1

В iOS8 вам нужно запросить авторизацию пользователя, прежде чем получить свое местоположение.

Существует два типа запроса:

-[CLLocationManager requestWhenInUseAuthorization] позволяет вам определять местоположение пользователя только тогда, когда приложение пробуждается.

-[CLLocationManager requestAlwaysAuthorization] позволяет вам находить местоположение пользователя, даже если оно находится в фоновом режиме.

Вы можете выбирать между ними соответственно.

Например, поставьте это перед началом обновления местоположения:

// ask for authorization
CLLocationManager * locationManager = [[CLLocationManager alloc] init];
// check before requesting, otherwise it might crash in older version
if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 

     [locationManager requestWhenInUseAuthorization];

}

Кроме того, не забудьте добавить две клавиши

NSLocationWhenInUseUsageDescription

и

NSLocationAlwaysUsageDescription

в ваш info.plist.

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

Ответ 2

В ios 8 Требуется авторизация, как указано ниже

    NSString * osVersion = [[UIDevice currentDevice] systemVersion];
    if ([osVersion floatValue]>= 8.0 ) {
    [_CLLocationManager requestAlwaysAuthorization]; //Requests permission to use location services whenever the app is running. 
// [_CLLocationManager requestWhenInUseAuthorization]; //Requests permission to use location services while the app is in the foreground. 
    }
    [_CLLocationManager startUpdatingLocation];

И вам нужно добавить два ключа в plist

1.NSLocationAlwaysUsageDescription

2.NSLocationWhenInUseUsageDescription

enter image description here

Ответ 3

В iOS 8 Mapview Current Location fire с использованием

Вы можете установить в свой файл .plist

<key>NSLocationWhenInUseUsageDescription</key>
<string>Your app name Or Other string</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Your app name Or Other string</string>

И ваша сторона кода, которую вы только реализуете,

CLLocationManager * locationmanager = [CLLocationManager new];

locationmanager.delegate = self;
locationmanager.distanceFilter = kCLDistanceFilterNone;
locationmanager.desiredAccuracy = kCLLocationAccuracyBest;
[locationmanager startUpdatingLocation];    
[locationmanager requestAlwaysAuthorization];

- (void) locationManager: (CLLocationManager *) manager didUpdateLocations: (NSArray *) местоположения {

location = [locations objectAtIndex:0];
[locationmanager stopUpdatingLocation];

}

Я использую это приложение для моего идеального местоположения.