2013-04-01 111 views
0

我正在開發一個應用程序,它涉及跟蹤新位置和X分鐘服務器更新。當time diff等於或大於X mins時,我停止位置更新,然後發送到服務器,如果位置小於X mins,則開始更新位置。但didUpdateToLocation委託方法在小於X mins時不會被調用。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中有相同的行。但是我的問題是當時間差小於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); 

一旦你設置委託該會工作。

希望這會有所幫助。