2014-09-18 2 views
7

Я только что начал свой проект для iOS 8, и у меня тоже возникла проблема, из-за которой я не могу задать вопрос, чтобы всплывать для разрешения. Я добавил следующее к моему info.plistiOS alertview для определения местоположения не всплывает

<key>NSLocationWhenInUseUsageDescription</key> 
<string>The spirit of stack overflow is coders helping coders</string> 
<key>NSLocationAlwaysUsageDescription</key> 
<string>I have learned more on stack overflow than anything else</string> 

и это мой код:

@interface ViewController() <MKMapViewDelegate> 
@property (nonatomic, strong) UIPopoverController* userDataPopover; 
@property (weak, nonatomic) IBOutlet MKMapView *mapView; 
@property (strong, nonatomic, retain) CLLocationManager *locationManager; 
@end 

@implementation ViewController 

-(CLLocationManager *)locationManager 
{ 
    if(!_locationManager) _locationManager = [[CLLocationManager alloc]init]; 
    return _locationManager; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.mapView.delegate = self; 
     [self.locationManager requestWhenInUseAuthorization]; 
     //[self.locationManager requestAlwaysAuthorization]; 

    [self.locationManager startUpdatingLocation]; 

    self.mapView.showsUserLocation = YES; 
    [self.mapView showsUserLocation]; 
    [self.mapView setMapType:MKMapTypeStandard]; 
    [self.mapView setZoomEnabled:YES]; 
    [self.mapView setScrollEnabled:YES]; 
} 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 800, 800); 
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES]; 
} 
+0

Вся информация о местоположении в iOS8 сломала мое приложение. Работала отлично в iOS7, и теперь с разрешения все изменилось. Будет следить за этим. – Fogmeister

+1

Я нахожу решение в своем коде. Когда я оставил эту строку: [self.locationManager startUpdatingLocation]; все началось! Надеюсь, что это может помочь вам! – Sanne

+2

завышенный для потрясающего текста в вашем plist! –

ответ

7

Убедитесь, что контроллер представления реализует CLLocationManagerDelegate и импорт #import CoreLocation/CoreLocation.h

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self setLocationManager:[[CLLocationManager alloc] init]]; 

    if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){ 
     [self.mapview setShowsUserLocation:NO]; 
     [self.locationManager setDelegate:self]; 
     [self.locationManager requestWhenInUseAuthorization]; 
    } 
    else{ 
     //Before iOS 8 
     [self.mapview setShowsUserLocation:YES]; 
    } 
} 

Добавить этот метод для прослушивания авторизацииСтатус изменений

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
    if (status == kCLAuthorizationStatusDenied) { 
     // permission denied 
     [self.mapview setShowsUserLocation:NO]; 
    } 
    else if (status == kCLAuthorizationStatusAuthorized) { 
     // permission granted 
     [self.mapview setShowsUserLocation:YES]; 
    } 
} 

Наконец убедитесь, что ваш PLIST содержит следующие записи, как указывал Sanne

<key>NSLocationWhenInUseUsageDescription</key> 
<string>The spirit of stack overflow is coders helping coders</string> 
<key>NSLocationAlwaysUsageDescription</key> 
<string>I have learned more on stack overflow than anything else</string> 
1

его новый для ИОС 10 Добавить разрешение местоположения в Plist файл

, если не добавить разрешения в Plist то разрешения всплывающее окно не показать

Добавить ниже разрешения в PLIST

1.Privacy - Место во время использования Использование Описание

2.Конфиденциальность - Местоположение Всегда Использование Описание

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