首先,我对iOS Dev和Objective-C非常陌生。所以请原谅任何愚蠢的问题或代码。iOS位置管理器多次触发
我一直在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工作正常,并且因为它应该发射。
我有一种感觉,它与我的手机上的另一个应用程序有关,但我不确定。
对此的任何帮助或见解都会很棒。
感谢
因为有时会检查全部3个,所以我可能会达到3点吗?这可能是为什么我的geoTrackingWS函数在1到3次的任何地方运行? – Sequenzia
是的,绝对。在iPhone上(有三个传感器,有些设备只有一个),可以想象你会得到三个估计值。每个新的应该比以前更准确 - 尝试记录水平和垂直精度,看看是否是这样。 – Tommy
感谢您的帮助。我认为这就是它。我结束了抓住最后一个,它似乎运作良好,它更准确。谢谢。 – Sequenzia