Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS位置管理器多次关闭_Ios_Objective C - Fatal编程技术网

iOS位置管理器多次关闭

iOS位置管理器多次关闭,ios,objective-c,Ios,Objective C,首先,我对iOS开发和Objective-C非常陌生。所以请原谅任何愚蠢的问题或代码 我一直在iPhone上测试定位服务。我有一个被NSTimer触发的代码: - (void)startLocationTracking { if(self.locationManager==nil){ _locationManager=[[CLLocationManager alloc] init]; _locationManager.delegate=self; _locati

首先,我对iOS开发和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运行良好,并按其应该的方式启动

我有一种感觉,它与我手机上的另一个应用程序有关,但我不确定

任何关于这方面的帮助或见解都将非常有用


谢谢

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

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

  • 细胞塔三角测量
  • 无线网络识别
  • 全球定位系统
第一个最不准确,但最容易获得;第二个通常更准确,但需要一段时间才能确定(因为有网络请求查找);最后一个最准确,但可能需要一段时间才能确定(搜索卫星等)


因此,位置管理器运行的时间越长,其响应结果的准确性就越高。例如,在运行“地图”时,您可以看到这样做的后果——它通常会很快将您锁定到一个相当大的区域,然后需要一些时间来获得更准确的估计。

我可能会达到3,因为它有时会检查所有3?这可能就是我的geoTrackingWS函数在任何地方运行1-3次的原因?是的,绝对是。在iPhone上(它有三个传感器;有些设备只有一个),很可能会触发三个估计。每一个新的都应该比以前更精确-试着记录水平和垂直精度,看看是否是这样。谢谢你的帮助。我想这就是事实。最后我刚好赶上了最后一个,它似乎工作得很好,而且更准确。谢谢