我有两个坐标:
@property (assign) CLLocationCoordinate2D coordinate1;
@property (assign) CLLocationCoordinate2D coordinate2;
在初始化期间,我将它们设置为无效(以后能够检查它是否已设置):
_coordinate1 = kCLLocationCoordinate2DInvalid;
_coordinate2 = kCLLocationCoordinate2DInvalid;
然后在方法i中检查它们是否有效:
- (void)checkIfValid {
BOOL coordinatesAreValid = (CLLocationCoordinate2DIsValid(_coordinate1) && CLLocationCoordinate2DIsValid(_coordinate2));
NSAssert(coordinatesAreValid, @"You didn't set up coordinates!");
}
在我调用方法之前,我通过这种方式设置这些坐标:
[_myclassinstance setCoordinate1:CLLocationCoordinate2DMake(mapView.region.center.longitude, mapView.region.center.latitude)];
[_myclassinstance setCoordinate2:CLLocationCoordinate2DMake(mapView.region.center.longitude, mapView.region.center.latitude)];
[_myclassinstance checkIfValid];
问题是应用声称,坐标错误。我打印过它们,它们似乎没问题:
(lldb) p _coordinate1
(CLLocationCoordinate2D) $1 = {
latitude = -122.4612387012154
longitude = 37.72925050874177
}
(lldb) p _coordinate2
(CLLocationCoordinate2D) $2 = {
latitude = -122.3582012987846
longitude = 37.84612098703619
}
然而,打印检查不起作用,也断言运行:
p (int)CLLocationCoordinate2DIsValid(_coordinate1)
(int) $3 = 0
有谁知道为什么会这样?欢迎任何帮助:)
答案 0 :(得分:5)
我不太了解CLLocationCoordinate2DIsValid
应该给你什么,但根据文档:
如果坐标满足至少一个坐标,则该坐标被视为无效 以下标准:
- 其纬度大于90度或小于-90度。
- 经度大于180度或小于-180度。
因此,由于你的纬度低于-90度,我猜这种方法只是在做他们的工作。
修改:您似乎只使用了CLLocationCoordinate2DMake
错误的参数。它应该是:
[_myclassinstance setCoordinate1:CLLocationCoordinate2DMake(lattitude, mapView.region.center.longitude)];
交换latitude
和longitude
。
答案 1 :(得分:2)
来自文档:
如果坐标满足至少一个坐标,则该坐标被视为无效 以下标准:
其纬度大于90度或小于-90度。它的 经度大于180度或小于-180度。
看起来你的纬度是-122度。超出有效范围。