对于小距离位置更改,不会调用didUpdateLocations委托方法

时间:2014-06-23 19:12:54

标签: ios objective-c ios7 mapkit core-location

我正在使用模拟器并更改位置以模拟设备的移动。

我发现的问题是:

在下面的代码中,当我尝试打印纬度和经度值时,该值四舍五入为6位十进制数字(43.825885,-75.839785),而我在模拟器中输入的原始值(Debug-> Location) )是43.82588498,-75.83978498。 (对于这些初始值,将调用didUpdateLocations委托)

现在我输入的下一个位置(就在上一个位置旁边)是43.82499145,-75.84050195,我必须得到43.824991,-75.840502。但是这次didUpdateLocations委托没有被调用。

但是当我现在给出43.82110323,-75.85291386(四舍五入到43.821103,-75.852914)时,这次调用了didUpdateLocation委托。

  • (void)locationManager:(CLLocationManager *)manager       didUpdateLocations :( NSArray *)位置  {

     CLLocationCoordinate2D coordinate = [[locations lastObject] coordinate];
     NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
     NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
    
     NSLog(@"here Latitude : %@", latitude);
     NSLog(@"here Longitude : %@",longitude);
    

    }

以下是我的locationManager属性:

    _locationManager = [[CLLocationManager alloc] init];
    [_locationManager setDelegate:self];
    [_locationManager setDesiredAccuracy:kCLLocationAccuracyBestForNavigation];
    [_locationManager setDistanceFilter:300];
    [_locationManager startUpdatingLocation];
    [_locationManager startUpdatingHeading];

这是我的mapView对象的设置:

    self.mainMapView.delegate=self;
    [self.mainMapView setShowsUserLocation:YES];

这是因为操作系统正在舍入Lat / Lon值吗?或者是因为我正在使用模拟器(我认为这不应该是问题,因为当我读到类似的问题时,人们已经提到如果你模拟位置,那么不应该有任何问题)?< / p>

我没有iOS设备。是否仍有可能didUpdateLocation可以在实际设备上正常工作?

我无法弄清楚这里的错误。我希望每次进行最轻微的位置更新时都会调用didUpdateLocations委托。请指导我。

2 个答案:

答案 0 :(得分:2)

尝试删除setDistanceFilter并让locationManger使用默认值(kCLDistanceFilterNone)。距离过滤器告诉您的位置管理器仅在设备移动了该数量或更多时才调用didUpdateLocations。因此,在您的情况下,它将每300米更新一次位置。

答案 1 :(得分:1)

您需要做的第一件事是将以下一个或两个密钥添加到Info.plist文件中: NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription

接下来,您需要为相应的位置方法,WhenInUse或Background请求授权。使用以下电话之一: [self.locationManager requestWhenInUseAuthorization] [self.locationManager requestAlwaysAuthorization]

//检查iOS 8 if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){     [self.locationManager requestWhenInUseAuthorization]; }