2014-12-26 4 views
0

Я попытался отобразить текущее местоположение пользователя (мне в основном нужен почтовый индекс), и ничего не происходит при запуске приложения, приложение просто отображает пустые ярлыки без аварийного сообщения. Вот мой код:Менеджер местоположения в IOS 8 Не работает

@implementation ViewController { 
    CLLocationManager *locationManager; 
    CLGeocoder *geocoder; 
    CLPlacemark *placemark; 
} 

@synthesize array, mytableView, latitudeLabel, longitudeLabel, addressLabel; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { 
     [locationManager requestWhenInUseAuthorization]; 
    } 
    [locationManager startUpdatingLocation]; 
    geocoder = [[CLGeocoder alloc] init]; 
} 

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{ 
    NSLog(@"didFailWithError: %@", error); 
    UIAlertView *errorAlert = [[UIAlertView alloc] 
           initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [errorAlert show]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"didUpdateToLocation: %@", newLocation); 
    CLLocation *currentLocation = newLocation; 

    if (currentLocation != nil) { 
     longitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; 
     latitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; 
    } 

    // Stop Location Manager 
    [locationManager stopUpdatingLocation]; 

    NSLog(@"Resolving the Address"); 
    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSLog(@"Found placemarks: %@, error: %@", placemarks, error); 
     if (error == nil && [placemarks count] > 0) { 
      placemark = [placemarks lastObject]; 
      addressLabel.text = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@", 
           placemark.subThoroughfare, placemark.thoroughfare, 
           placemark.postalCode, placemark.locality, 
           placemark.administrativeArea, 
           placemark.country]; 
     } else { 
      NSLog(@"%@", error.debugDescription); 
     } 
    } ]; 

} 

- (IBAction)getCurrentLocation:(id)sender { 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    [locationManager startUpdatingLocation]; 

} 
+1

Вы установите PLIST, чтобы для авторизации местоположения? –

+0

У меня нет ничего в plist, поэтому я не использую его. – Horray

+1

Вам нужно обновить свой plist: http://stackoverflow.com/a/24063578/2274694 –

ответ

2

Добавьте эти свойства в файле PLIST. Значение строки может быть любым, что вы хотите.

enter image description here

Edited для дальнейшего ответа на другой запрос Майка в комментарии:

В файле .h вашего ViewController в

@interface YourViewController : UIViewController<CLLocationManagerDelegate> 
+0

Я получаю эту ошибку locationManager.delegate = self; говоря «Назначение» id из несовместимого типа «ViewController * const_strong» 1. Что это значит и как его исправить? – Horray

+0

Я думаю, что вы не зарегистрировали контроллер вида, в котором вы пытаетесь получить locatioin как делегат менеджера местоположений. Внедрите протокол в вашем диспетчере просмотра. –

+0

Я не уверен, что произошло, но сегодня, когда я протестировал свое приложение, он дал мне ошибку Error Domain = kCLErrorDomain Code = 0. Операция не может быть выполнена. (KCLErrorDomain error 0.) – Horray

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