2014-12-26 4 views
-1

Я пытаюсь получить точное местоположение в соответствии с моими координатами. Я внедрил CLLocationManager в свой viewController под названием myLocation. Моя проблема в том, что я не получаю мои координаты в первый раз, но когда я снова подхожу, я получил координаты. Я не могу понять эту проблему, почему это не появляется в первый раз. Я также пытался дать NSTimer до stoplocation, но все равно не смог получить результат в первый раз, каждый раз, когда я получаю (нулевое) значение, а затем получаю координаты.Получение координат CLLocationManager IOS

Мой код:

#import <UIKit/UIKit.h> 
#import <Corelocation/CoreLocation.h> 
@interface myLocation : UITableViewController<CLLocationManagerDelegate> 
@property (strong, nonatomic) CLLocationManager *locationManager; 

@end 

@interface myLocation() { 
    CLLocationManager* _locationManager; 
    NSString * _lat; 
    NSString * _lng; 
} 
@end 

@implementation myLocation 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    _locationManager = [[CLLocationManager alloc] init]; 
    _locationManager.distanceFilter = kCLDistanceFilterNone; 
    _locationManager.delegate = self; 
    _locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
     [_locationManager requestWhenInUseAuthorization]; 

    [_locationManager startUpdatingLocation]; 

} 
- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations { 
    CLLocation *location = [locations lastObject]; 
    [_locationManager stopUpdatingLocation]; 
    _lat =[NSString stringWithFormat:@"%f",location.coordinate.latitude]; 
    _lng =[NSString stringWithFormat:@"%f",location.coordinate.longitude]; 
} 
- (void)viewWillAppear:(BOOL) animated 
{ 
NSLOG(@"%@",_lat); 
NSLOG(@"%@",_lng);  
} 
+0

О, вы имеете в виду, почему ваши координаты не печатаются во взглядеWillAppear? –

+0

Да, только в первый раз. @LyndseyScott – developer

ответ

1

Ваши координаты пока не появляются при попытке напечатать их в viewWillAppear:, потому что CLLocationManager не было достаточно времени, чтобы восстановить первое место проживания. Подождите, пока не будет вызван didUpdateLocations:, прежде чем пытаться использовать координаты устройства, поскольку didUpdateLocations: - это то, где вы будете получать эти координаты. Я рекомендую удалить вашу попытку распечатать код координат из вашего viewWillAppear и просто напечатать их в didUpdateLocations:.

В комментариях ОП заявила, что хочет «обновить» местоположение в течение viewWillAppear. Я предлагаю остановить обновления, когда представление исчезает и перезапуск обновления, как только вид появляется снова:

- (void)viewWillAppear:(BOOL) animated 
{ 
    [_locationManager startUpdatingLocation]; 
} 

- (void)viewWillDisappear:(BOOL) animated 
{ 
    [_locationManager stopUpdatingLocation]; 
} 
+0

Ваш суфсик для меня очень важен, в моем сеценарии остается немного проблем. Я просто звоню в viewWillAppear, чтобы каждый раз, когда он загружался свеже, всякий раз, когда он просто щелкнул, все его обновлялось. возможный сценарий, если у пользователя нет интернет-соединения, и после этого он получил, что он может сделать, чтобы обновить. любые предложения для этого? – developer

+0

У меня есть решение, мне помогла инициализация. Спасибо – developer

+1

@ user3166680 Я на самом деле просто печатал подобное предложение, но не нужно полностью повторно инициализировать своего менеджера местоположений. Я обновил свой ответ, предложив просто остановить и перезапустить диспетчер местоположений, когда представление исчезнет и снова появится. –

0

Это займет некоторое время услуги определения местоположения, чтобы начать и назвать свой метод делегата - Это почти наверняка не будет до viewWillAppear вызывается, если вы только начинаете услуги по определению местоположения в viewDidLoad. Кроме того, при первом запуске приложения пользователь должен дождаться разрешения пользователя.

Вы можете изучить location недвижимость вашего CLLocationManager, чтобы получить самое последнее место. Если это nil, то местоположение не определено (пока).

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