2013-04-01 54 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); 

一旦你设置委托该会工作。

希望这会有所帮助。