2014-10-04 6 views
1

Я обновился до Xcode 6 (из Xcode 5), и теперь мое приложение больше не работает (я был очень горд, что он работал под IOS7). У меня есть этот «знаменитый» отладочный вывод:Показать местонахождение пользователя Xcode6/IOS8

Попытка запуска обновления MapKit без запроса разрешения на размещение. Необходимо сначала вызвать [CLLocationManager requestWhenInUseAuthorization] или - [CLLocationManager requestAlwaysAuthorization].

Конечно, я искал это сообщение, чтобы найти решение, но кажется, что ничего не работает. Поэтому я прошу совета.

Вот мой файл заголовка:

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
#import <CoreLocation/CoreLocation.h> 
#import "MapPoint.h" 

#define kGOOGLE_API_KEY @"my google api" 
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

@interface XYZViewController : UIViewController <MKMapViewDelegate,  CLLocationManagerDelegate> 

{ 
CLLocationManager *locationManager; 
CLLocationCoordinate2D currentCentre; 
int currenDist; 
BOOL firstLaunch; 
} 

@property (weak, nonatomic) IBOutlet MKMapView *mapView; 

@end 

А вот мой файл реализации:

#import "XYZViewController.h" 
#import "DetailViewController.h" 

@interface XYZViewController() 

@end 

@implementation XYZViewController 

-(void)viewDidLoad { 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

//Make this controller the delegate for the map view. 
self.mapView.delegate = self; 

// Ensure that you can view your own location in the map view. 
[self.mapView setShowsUserLocation:YES]; 

//Instantiate a location object. 
locationManager = [[CLLocationManager alloc] init]; 

//Make this controller the delegate for the location manager. 
[locationManager setDelegate:self]; 

//Set some parameters for the location object. 
[locationManager setDistanceFilter:kCLDistanceFilterNone]; 
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 

firstLaunch=YES; 
} 

ответ

0

Вам нужно сделать, как описание ошибки сказать, и добавить вызов requestWhenInUseAuthorization или requestAlwaysAuthorization , Это было рассмотрено ранее, т.е. iOS alertview for location permission doesn't pop up

Необходимые изменения могут выглядеть следующим образом:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    //Make this controller the delegate for the map view. 
    self.mapView.delegate = self; 


    //Instantiate a location object. 
    locationManager = [[CLLocationManager alloc] init]; 

    //Make this controller the delegate for the location manager. 
    [locationManager setDelegate:self]; 

    //Set some parameters for the location object. 
    [locationManager setDistanceFilter:kCLDistanceFilterNone]; 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 

    // Request use on iOS 8 
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) { 
    // Ensure that you can view your own location in the map view. 
    [self.mapView setShowsUserLocation:YES]; 
    } else { 
    [locationManager requestWhenInUseAuthorization]; 
    } 

    firstLaunch=YES; 
} 

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
    if (status == kCLAuthorizationStatusAuthorizedWhenInUse) { 
    // Ensure that you can view your own location in the map view. 
    [self.mapView setShowsUserLocation:YES]; 
    } 
} 

Приведенный выше код сделать проверку версии (в яблоневом рекомендованному пути), вы можете также сделать проверку функций, который чище, но иногда причина проблемы в моем собственном опыте.

Трудная часть - вам нужно предоставить описание вашего использования в приложении Info.plist. Иначе UIAlert не появится, и вам не будет предоставлено разрешение. Перейдите к настройкам проекта/цели в xcode, перейдите на вкладку «Информация». Нажмите кнопку +. Для ключа введите NSLocationWhenInUseUsageDescription, и значение должно быть строкой, описывающей, как вы будете использовать местоположение пользователя. Вы также можете открыть файл «Info.plist» в разделе «Поддержка файлов».

Я подозреваю, что это не сработало для вас.

+0

Я добавил ключ со своим строковым значением в своих предыдущих попытках, но не работал. В любом случае, ваш ответ на такое короткое уведомление мне очень помог, и теперь мой проект работает! Большое спасибо. С наилучшими пожеланиями, –

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