Я пытаюсь использовать основное расположение в симуляторе iOS 8, для чего я добавил на мой взгляд объект типа 'MapKit View'
, на вкладке проверен инспектор Atributtes вариант show user location
, В моем проекте я использую ARC, ниже структура моего кода:Расположение ядра не запрашивается у Пользователя и методы не вызываются
ViewController.h
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
@interface MeuPrimeiroViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>{
IBOutlet MKMapView *mapView;
}
@property (nonatomic, strong) CLLocationManager *locationManager;
@end
ViewContr oller.m
@synthesize locationManager;
- (void)viewDidLoad {
[super viewDidLoad];
if ([CLLocationManager locationServicesEnabled]) {
NSLog(@"CLLocationManager locationServicesEnabled == ON");
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// Check for iOS 8 Vs earlier version like iOS7.Otherwise code will
// crash on ios 7
if ([locationManager respondsToSelector:@selector
(requestWhenInUseAuthorization)]) {
[locationManager requestAlwaysAuthorization];
}
[locationManager startUpdatingLocation];
}else{
NSLog(@"CLLocationManager locationServicesEnabled == OFF");
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
NSLog(@"It works this method is called");
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"Error: %@",[error description]);
}
В моей info.plist
файле добавить этот ключ (NSLocationAlwaysUsageDescription)
с этим значением (String)
.
Если я иду атрибуты инспектора и установите флажок (показывает местоположение пользователя) я получаю сообщение об ошибке, и метода ядра местоположения не называет:
Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
Если отключить флажок, это сообщение исчезнет, и методы определения местоположения снова не вызываются. Я пытаюсь изменить навигацию на londom
, попробуйте изменить местоположение на free run
, но ничего, что я пробовал, работал, методы не продолжают вызываться и никогда не показывали сообщение с полномочиями для использования основного местоположения. Я считаю, что я уже пробовал все, у кого есть какие-либо предложения или решение этой проблемы?
Я думаю, что вам нужно еще одну запись в файле Info.plist, NSLocationWhenInUseUsageDescription. Кроме того, для статуса авторизации iOS 8 должно быть kCLAuthorizationStatusAuthorizedAlways – Puran
Well @Puran Я добавляю эти ключи, и теперь у меня есть info.plist, есть 3 ключа (NSLocationWhenInUseUsageDescription., KCLAuthorizationStatusAuthorizedAlways, NSLocationAlwaysUsageDescription), я пытаюсь включить и отключить отображение местоположения пользователя и не работать , больше? –
добавил код, который я использую ниже. Также kCLAuthorizationStatusAuthorizedAlways не обязательно должен быть в Info.plist, это просто тип авторизации – Puran