在我正在开发的应用程序中,用户被指示按下按钮将 MKAnnotations 拖放到地图上。他们将丢弃 2 或 3 个引脚,每个引脚在添加引脚时都保存到 @property,didAddAnnotationViews
因为我稍后需要对其进行引用,并且我需要知道它是哪个引脚 - 引脚 1、2 或 3(它们被丢弃的顺序)。
我正在使用自定义 MKAnnotation 和 MKAnnotationView 类为每个注释添加一些 NSString,我不确定这是否重要。
我正在创建 3 个这样的属性:
@property (nonatomic, strong) CustomAnnotationView *ann1;
@property (nonatomic, strong) CustomAnnotationView *ann2;
@property (nonatomic, strong) CustomAnnotationView *ann3;
这是我的didAddAnnotationViews
:
- (void)mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views
{
for(MKAnnotationView *view in views)
{
if(![view.annotation isKindOfClass:[MKUserLocation class]])
{
CustomAnnotationView *newAnnView = (CustomAnnotationView*)view;
if(newAnnView.type == CustomType1)
{
ann1 = newAnnView;
}
else if(newAnnView.type == CustomType2)
{
ann2 = newAnnView;
}
else if(newAnnView.type == CustomType3)
{
ann3 = newAnnView;
}
}
}
}
另外,这是我的viewForAnnotation
方法:
- (MKAnnotationView *)mapView:(MKMapView *)pMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if([annotation class] == MKUserLocation.class)
{
return nil;
}
CustomAnnotationView *annotationView = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"WayPoint"];
annotationView.canShowCallout = YES;
annotationView.draggable = YES;
[annotationView setSelected:YES animated:YES];
[annotationView setRightCalloutAccessoryView:customCalloutButton];
return annotationView;
}
现在,最终,我需要保存这些注释的坐标,这就是问题所在。有时,但只是偶尔一次,ann1.annotation.coordinate.latitude
并且ann1.annotation.coordinate.longitude
都是 0.0(这发生在 ann1、ann2 或 ann3 上,仅使用 ann1 作为示例)!为什么会这样?我感觉这与对象引用问题有关,因为 MKAnnotationView 仍然完好无损,但注释已被清除。也许我用 ann1 = newAnnView 分配引用很糟糕?我应该使用viewForAnnotation
吗?
有没有人看到我做错了什么?
更新
我查看了我的 MKAnnotation 子类,我注意到虽然我根据文档定义了一个坐标属性,但我并没有在我的实现文件中 @synthesizing 它。我现在已经添加了这一点,但我还无法复制这个问题......如果这最终成为“修复”,我仍然很困惑为什么我的代码大部分时间都可以在没有 @synthesize 的情况下工作. 也许我实际上并没有修复它,而且我稍后会让自己失望。