2012-05-24 2 views
5

현재 CLLocationManager에서 마지막 위치를 가져와야하는 앱을 개발하고 있습니다 (정기적 추적없이). 얼마나 오래되었거나 정확했는지는 중요하지 않습니다. 필요가 없으며 추적을 시작하고 싶습니다. 캐시에서 마지막 위치를 잡아두기 만하면됩니다. IMHO, CLLocationManager는 iOS의 공유 구성 요소이며 일부 앱이 위치 추적을 사용하는 경우 다른 앱은 CLLocationManager.location에서 가장 최근 위치를 사용할 수 있어야합니다. CLLocationManager를 할당/초기화하고 그 위치를 잡는 것만으로도 충분합니다. 그러나 그렇지 않습니다. 나는 iPhone4에서 테스트를 마쳤습니다. Google지도를 시작하고 현재 위치를 확인한 다음 내 응용 프로그램에 갔지만 [[CLLocationManager alloc] init] 위치 속성이 없으면 무효입니다.CLLocationManager에서 마지막으로 알려진 위치를 얻으려면 앱이 위치 추적을 시작해야합니까?

업데이트 : 시도 [locationManager startUpdatingLocation]; 및 [locationManager stopUpdatingLocation]; 그러나 결과는 같습니다. 유일한 해결책은 정기적 인 추적을 시작하는 것입니다.

UPDATE2 : 이상하지만 CLLocationManager의 alloc/init 후에 "앱이 위치 서비스를 사용하려고합니다"라는 경고가 표시되지 않습니다. 여기에 내 코드 조각입니다 : 당신의 locationManager가있는 경우

CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 

[locationManager startUpdatingLocation]; 
[locationManager stopUpdatingLocation]; 
NSLog(@"%@", locationManager.location); //prints nil 
+0

당신이 들여다 추천을 [CoreLocation와 현재 위치를 찾는 방법 (http://stackoverflow.com/questions/6516967/how-to-find- 현재 위치와 함께), 'NSArray'에서 찾은 위치를 저장합니다. –

답변

2

먼저 당신이 확인해야합니다,의는 '정적'위치가 미리 저장 가정 해 봅시다.

그렇다면 모두 끝났습니다.

그렇지 않은 경우 startUpdatingLocation을 입력하고 didUpdateToLocation:fromLocation: 콜백에 stopUpdatingLocation을 입력해야합니다.

내 경험에 의하면 그것이 유일한 위치를 얻는 가장 좋은 방법이라고합니다. 저자 업데이트에 맞게

UPDATE :

당신이해야하지 stopUpdatingLocation 단지 startUpdatingLocation 후. startUpdatingLocation은 백그라운드에서 서비스를 시작하므로 위치를 얻을 때까지 기다려야하므로 콜백 메소드에서 인보 크하십시오.

+0

'정적'위치 란 무엇입니까? Google지도로 이동하여 내 현재 위치를 볼 수 있으면 정적 위치로 간주해야합니까? Google지도는 위치 서비스를 확실히 사용하므로 CLLocationManager에 적어도 하나 이상의 정적 위치가 있어야합니다. – Centurion

+0

'didUpdateToLocation : fromLocation :'콜백을 통해 앱이 얻지 못한 위치를 의미합니다. 그리고 예, Google지도는 위치 서비스를 사용하지만 앱이 다른 앱에서 얻은 위치 정보를 얻을 수 있다고 보장 할 수는 없습니다. – sonxurxo

+1

그건 그렇고, 나는 당신이 ** locationManager를 사용하여 시작할 때 경고가 나타나야한다는 것을 99 % 확신한다. – sonxurxo

1

CLLocationManager을 사용하려면 CLLocationManagerDelegate을 구현해야합니다.

-[CLLocationManager startUpdatingLocation]은 비동기 프로세스를 시작합니다. 같은 runloop주기에서 프로세스를 중지하면 프로세스가 시작되지 않고 권한 대화 상자가 표시되지 않습니다.

그것은이 같은 간다 :

@interface MyClass : NSObject <CLLocationManagerDelegate> { 
    CLLocationManager *manager; 
    CLLocation *lastLocation; 
} 

@end 

@implementation 

- (id)init { 
    self = [super init]; 
    if (self) { 
     manager = [[CLLocationManager alloc] init]; 
     manager.delegate = self; 
     [manager startUpdatingLocation]; 
    } 
    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation; 
{ 
    lastLocation = newLocation; 
    [manager stopUpdatingLocation]; 
} 

// in your real implementation be sure to handle the error cases as well. 
@end 
관련 문제