iOS位置管理器多次启动

时间:2013-01-21 23:42:05

标签: ios objective-c

首先,我是iOS Dev和Objective-C的新手。所以请原谅任何愚蠢的问题或代码。

我一直在iPhone上测试位置服务。我有这个由NSTimer引发的代码:

- (void)startLocationTracking
{

  if(self.locationManager==nil){
    _locationManager=[[CLLocationManager alloc] init];

    _locationManager.delegate=self;

    _locationManager.desiredAccuracy=kCLLocationAccuracyBest;

    _locationManager.distanceFilter=1;

    self.locationManager=_locationManager;

  }

if([CLLocationManager locationServicesEnabled]){

    [self.locationManager startUpdatingLocation];

  }

}

这是我的位置管理员功能:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation    *)newLocation fromLocation:(CLLocation *)oldLocation{

[self timerLog];

NSString *deviceID = [self getUUID];

double lat = newLocation.coordinate.latitude;
double lon = newLocation.coordinate.longitude;
double alt = newLocation.altitude;
double dir = newLocation.course;
double spd = newLocation.speed;
double ha = newLocation.horizontalAccuracy;
double va = newLocation.verticalAccuracy;

NSDateFormatter *formatter;
NSString        *ts;

formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];

ts = [formatter stringFromDate:[NSDate date]];   

[self geoTrackingWS :deviceID :lat :lon :alt :dir :spd :ha :va :ts];

[manager stopUpdatingLocation];

}

出于某种原因,我的函数geoTrackingWS随机多次触发。 NSTimer每1分钟运行一次(就像测试一样),有时它工作正常,只调用geoTrackingWS一次,但有时会调用2到3次。

我已经完成了日志记录,我可以看到我的NSTimer工作正常并按照它应该开始。

我觉得它与手机上的其他应用程序有关,但我不确定。

对此的任何帮助或见解都会很棒。

由于

2 个答案:

答案 0 :(得分:1)

您可能不希望多次创建新的CLLocationManager实例,从计时器调用-startLocationTracking会这样做。从代码的外观来看,我认为你只需要调用-startLocationTracking一次,然后当它有新信息时,位置API会向你的委托(你已经指定为self)发送消息。您可能希望刷新对委托模式的理解,并查看使用CLLocationManager的一些示例代码。我希望有所帮助。

答案 1 :(得分:1)

位置经理通常有多种方法来确定您的位置,包括:

  • 细胞塔三角测量;
  • wifi网络识别;
  • GPS。

第一个是最不准确,但最容易获得,第二个通常更准确,但需要一段时间来弄清楚(因为有一个网络请求查找)和最后是最准确但可能需要相当而要弄清楚(寻找卫星等)。

因此,预计行为将使位置管理员在运行的时间越长,响应越准确。例如,当您运行地图时,您可以看到其结果 - 它通常会很快将您缩小到相当大的区域,然后需要一些时间来获得更准确的估算。