我有一个自定义类,它具有一个坐标的实例变量:

CLLocationCoordinate2D eventLocation;
@property(nonatomic) CLLocationCoordinate2D eventLocation;

我正在解析一个具有可选字段的xml文件,该字段可能存在也可能不存在。
如果是这样,则将其设置为:
CLLocationCoordinate2D location;
NSArray *coordinateArray = [paramValue componentsSeparatedByString:@","];
if ([coordinateArray count] >= 2) {
    location.latitude = [[coordinateArray objectAtIndex:0] doubleValue];
    location.longitude = [[coordinateArray objectAtIndex:1] doubleValue];
} else {
    NSLog(@"Coordinate problem");
}
info.eventLocation = location;

我要做的基本上是在 map 上添加注释
annotation.coordinate = alert.info.eventLocation;

我知道我需要在此处进行一些检查以确保该名称存在,但不允许我执行if (info.eventLocation == nil)甚至if (info.eventLocation.latitude == nil)
这似乎是一个非常基本的问题,但我进行了一些搜索,没有人能够真正提供良好的答案/想法。我的架构完全关闭了吗?

最佳答案

因为CLLocationCoordinate2D是一个结构,所以没有nil值之类的东西。如果它们是对象实例变量,那么Objective-C会将结构初始化为0,因此,如果您不为eventLocation设置值,则annotation.coordinate.longitudeeventLocation.lattitude都将为0。由于这是有效位置,因此不是有用的标记。

我将定义一个非物理的值:

static const CLLocationDegrees emptyLocation = -1000.0;
static const CLLocationCoordinate2D emptyLocationCoordinate = {emptyLocation, emptyLocation}

然后将此值分配给alert.info.eventLocation = EmptyLocationCoordinate以表示一个空值。然后,您可以检查(alert.info.eventLocation == emptyLocationCoordinate)

10-08 14:42