重现问题的代码:
-(void)testDistance {
NSLog(@"Test distance...");
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:137.02954600000001 longitude:50.543728999999999];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:55.79676300 longitude:49.10834400];
CLLocationDistance distance = [location1 distanceFromLocation:location2];
NSLog(@"Distance: %lf", distance);
}
iOS 8.4 输出:
Distance: 9021699.415204
iOS 9.1 输出:
Distance: 0.000000
location1
和 location2
不为零。
我在 SO 中搜索了一个类似的问题,但找不到。对我来说看起来像是 iOS 9 的错误。你同意吗?你得到类似的结果吗?我想向 Apple 发送错误报告,但我想先确认一下。
我在模拟器(iOS 8.4 和 iOS 9.1)上运行了代码。系统语言设置为俄语,地区设置为俄罗斯。
更新:lat
和lon
结果是混合的。纬度应在 [-90, 90] 范围内。在以前的 iOS 版本中,它仍然产生了一些结果。在 iOS 9 中,他们让它返回 0
。对于这种情况,我认为这不是一个好的返回值,因为它是一个完全有效的值。我认为他们应该返回一些错误代码(就像他们对 nil
所做的那样,返回 -1
)。至少,它必须在文档中提及。我打算在不久的将来提交错误报告。
最佳答案
检查 location1 的纬度值 .. 我猜与纬度范围 (-90 , 90) 有一些不匹配。
关于ios - CLLocation distanceFromLocation : returns zero on iOS 9. 是bug吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346082/