2014-12-26 3 views
-1

좌표에 따라 정확한 현재 위치를 얻으려고합니다. 내 viewControllerCLLocationManager을 구현했습니다. myLocation입니다. 제 문제는 처음으로 좌표를 얻지는 않을 것이지만 다시 접근하면 좌표가 생깁니다. 이 문제가 왜 처음으로 나타나지 않는지 이해할 수 없습니다. 또한 NSTimerstoplocation에게 줄려고했으나 처음으로 결과를 얻지 못하고 처음으로 (null) 값을 얻었을 때 좌표를 얻지 못했습니다.좌표 얻기 CLLocationManager IOS

내 코드 : 당신이 CLLocationManager 아직 최초의 위치를 ​​검색 할 수있는 충분한 시간이 없었 때문에 viewWillAppear:에서 그들을 인쇄하려고 할 때

#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

오, 왜 좌표가 viewWillAppear에 인쇄되지 않는 것입니까? –

+0

네, 처음으로. @LyndseyScott – developer

답변

1

좌표는 아직 표시되지 않습니다. didUpdateLocations:이 해당 좌표를 수신 할 것이므로 기기 좌표를 사용하기 전에 먼저 didUpdateLocations:이 호출 될 때까지 기다립니다. viewWillAppear에서 좌표 코드를 인쇄하려는 시도를 삭제하고 대신 didUpdateLocations:에 인쇄하는 것이 좋습니다.

의견에서 OP는 그가 viewWillAppear 동안 위치를 "새로 고침"하려고한다고 말했습니다. 내가보기가 사라지면 업데이트를 중지하고 즉시보기가 다시로 업데이트를 다시 시작하는 것이 좋습니다 : 위치 서비스가 시작하고 대리자 메서드를 호출하는 것은 약간의 시간이 소요

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

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

당신의 sugesstion 나를 위해 appreciabble, 약간의 문제는 내 secenario에 남아 있습니다. 그냥 viewWillAppear에서 호출하는 것입니다. 그래서 새로로드 될 때마다 방금 클릭 할 때마다 모두 새로 고쳐집니다. 가능한 시나리오, 사용자가 인터넷에 연결되어 있지 않다면, 그리고 그 후에 그는 그가 무엇을 할 수 있는지를 물어 봅니다. 그 어떤 제안? – developer

+0

나는 해결책을 얻었고 viewwillapear의 초기화가 나를 도왔다. 감사합니다 – developer

+1

@ user3166680 사실은 비슷한 제안을 실제로 입력했지만 위치 관리자를 완전히 다시 초기화 할 필요가 없습니다. 보기가 사라지고 다시 나타나면 위치 관리자를 중지하고 다시 시작하라는 제안으로 내 대답을 업데이트했습니다. –

0

- 이것은 거의 확실하게 일어나지 않을 것입니다 에 위치 서비스 만 시작하는 경우 viewWillAppear이 호출되기 전에 호출됩니다. 또한 앱을 처음 실행하면 사용자가 권한을 부여 할 때까지 기다려야합니다.

CLLocationManagerlocation 속성을 검토하여 가장 최근 위치를 확인할 수 있습니다. nil 인 경우 위치가 결정되지 않았습니다 (아직).