2013-04-01 2 views
0

X 분으로 서버의 새 위치와 업데이트를 추적하는 앱을 개발 중입니다. 시간 diff가 X 분보다 크거나 같을 때 위치 업데이트를 중지하고 서버로 전송 한 다음 X 분 미만인 경우 위치 업데이트를 시작합니다. 그러나 didUpdateToLocation 대리자 메소드는 X 분 미만이면 호출되지 않습니다.CLLocationManager가 델리게이트 메서드를 호출하지 않습니다.

나는 여기에 내 코드를 게시하고있다 :

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
    fromLocation:(CLLocation *)oldLocation 
{ 
    if (theDiff > 10.0f || myDate == nil) 
     { 
      [self stopUpdating]; 
     } 
     else 
     { 
      [self.mLocationManager startUpdatingLocation]; 
     } 

} 
+0

.h에 을 추가 했습니까? – iMeMyself

+0

예. 내 .h 파일에 추가했습니다. – Sharme

+0

나는 프로토콜을 의미합니까? 즉 UIViewController iMeMyself

답변

1

이 시도,

//in your .h 

CLLocationManager *locationManager; 

@property (nonatomic,retain) CLLocationManager *locationManager; 

// Then synthesize it in your .m 

@synthesize locationManager; 

//in your viewDidLoad 

locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
[locationManager startUpdatingLocation]; 

당신이 휴대 전화로 이동 whwnever이 메소드를 호출합니다.. 시뮬레이터 locatin도 변경하여이를 확인할 수 있습니다.

호프가 도움이 되길 바랍니다. 감사합니다. 행복한 코딩.

+0

고마워. 하지만 같은 코드가 있습니다. – Sharme

+0

예, viewDidLoad에 같은 줄이 있습니다. 하지만 내 질문은 시간 diff가 X 분보다 작을 때 위치를 다시 업데이트하는 것입니다. 몇 분 후에 서버에 데이터를 보내고 위치를 다시 업데이트하면 정상적으로 작동합니다. 그러나 X 분보다 작 으면 DidUpdateToLocation 메서드를 다시 호출해야합니다. – Sharme

+0

좋아, 시간 체크 코드를 작성해야한다. stopupdate를 호출하면 didUpdateToLocation 메서드를 다시 호출 할 수 없기 때문에 조건에 들어갈 것이기 때문입니다. – Dhruvik

0

이 방법을 추가하는 .m이 시도하거나 다른 사용자 지정 코드 게시물이 경우

-(void)LocationWithTime 
{ 
    [CLController sharedInstance].locationManager.desiredAccuracy = 100.0; 
    [CLController sharedInstance].delegate = self; 
    BOOL locationAccessAllowed = NO ; 

    if([CLLocationManager respondsToSelector:@selector(locationServicesEnabled)]) 
    { 
     locationAccessAllowed = [CLLocationManager locationServicesEnabled] ; 
    } 
    if(locationAccessAllowed == YES) 
    { 

     [[CLController sharedInstance].locationManager startUpdatingLocation]; 
    } 

} 

이 내가 사용했던 대의원 방법입니다 - 애플 API에서

-(void)newLocationUpdate:(NSString *)latvalue longValue:(NSString*)longvalue Error:(int) errCode 
{ 



    DebugLog(@"LatLong values %@ %@", [UserContext sharedInstance].strLat, [UserContext sharedInstance].strLong); 

    self.strLALat = latvalue; 
    self.strLALong = longvalue; 

    [[CLController sharedInstance].locationManager stopUpdatingLocation]; 
    [CLController sharedInstance].delegate=nil ; 
} 
+0

고맙습니다. :) 이것을 시험합시다. – Sharme

0

발췌 문서,

/* *을 locationManager : didUpdateToLocation : fromLocation : *
*이 메소드는 더 이상 사용되지 않습니다. locationManager : didUpdateLocations : *이 구현 된 경우이 메소드는 호출되지 않습니다.

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_6, __MAC_NA, __IPHONE_2_0, __IPHONE_6_0); 

이용 */

대신 아래 위임 방법

/* * 을 locationManager : didUpdateLocations : * 위치 시간순 CLLocation 객체들의 어레이이다. */

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0); 

위임자를 설정하면 작동합니다.

희망이 도움이됩니다.

관련 문제