我正在尝试使用委托获取用户的当前位置,并将其用于另一个类中以进行API调用。每次我发送位置信息时,都会触发API调用。问题在于,didUpdateLocations
方法中的委托对于相同的位置执行了两次,然后API返回了两次相同的结果,并且只要位置发生急剧变化,我只需要它再次调用一次即可。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation * newlocation = [locations lastObject];
if (newlocation.horizontalAccuracy < 0) {
return;
}
NSTimeInterval cachedTime = [newlocation.timestamp timeIntervalSinceNow];
if (fabs(cachedTime) < 120) {
return;
} else {
if (_delegate) {
[self.delegate sendUserLocationWith: newlocation.coordinate.latitude andLongitude: newlocation.coordinate.longitude];
}
}
我曾尝试使用位置时间戳来防止这种情况发生,但是如果我在两分钟内运行应用两次,则委托人将不会在第二次发送位置时希望它在我第一次加载应用时一次发送用户位置如果变化超过5m,则再次出现。
答案 0 :(得分:0)
保留最后一个位置并将新报告的位置与呼叫代表时的最新位置进行比较。
例如
if (fabs(cachedTime) < 120 || CLLocationEqualTo(lastLocation.coordinate, newLocation.coordinate)) {
return
}
lastLocation = newLocation;
if (_delegate) {
[self.delegate sendUserLocationWith: newlocation.coordinate.latitude andLongitude: newlocation.coordinate.longitude];
}