0

我正在开发一个应用程序,该应用程序涉及在 X 分钟内跟踪新位置和服务器更新。当时间差异等于或大于 X 分钟时,我将停止位置更新,然后发送到服务器,然后在小于 X 分钟时开始更新位置。但是当它小于 X 分钟时,不会调用 didUpdateToLocation 委托方法。

我在这里发布我的代码:

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

}
4

3 回答 3

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];

无论您使用手机移动时,这都会调用该方法。您也可以通过更改模拟器位置来检查这一点。

希望这会有所帮助。谢谢,快乐的编码。

于 2013-04-01T11:36:44.023 回答
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];
    }

}

这是我使用的委托方法 -

-(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 ;
}
于 2013-04-01T11:47:08.593 回答
0

摘自 Apple API 文档,

/* * 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: * locations 是按时间顺序排列的 CLLocation 对象数组。*/

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

一旦您设置了委托,这将起作用。

希望这可以帮助。

于 2014-05-15T11:57:45.773 回答