使用iOS-v9.1,XCode-v7.1:
我的mapView的委托方法尚未运行。
以下适用:
但不幸的是,这不起作用!问题是为什么?????
我尝试按如下方式设置PVParkMapViewController的委托(请参阅下面的注释行代码)。
但是放置委托(即取消上面的那一行)会使PVParkMapViewController正常工作 - 但不幸的是,ABFRealmMapView代理都不会再工作了。因此,我不明白这里发生的任何事情或其他事情。
任何帮助表示赞赏!目标是让ABFRealmMapView和PVParkMapViewController的所有代表都工作!
答案 0 :(得分:0)
......我花了一段时间 - 但我发现了错误:
确实,在PVParkMapViewController中设置mapView-delegate是绝对必要的!即在内部执行以下操作 - (void)viewDidLoad:
[self.mapView setDelegate:self];
或更新的写作风格:
self.mapView.delegate = self;
事实证明,通过这样做,所有ABFRealmMapView代理仍然工作,他们都调用外部代表!实际上,事实证明,通过设置上述内容,所有ABFRealmMapView委托方法都调用PVParkMapViewController的external-delegate-method实现(即它们偏离PVParkMapViewController委托)。
令我感到困惑的是,Annotation-Views也受到委托 - 外部门限偏差的影响!因此(错误地)我认为ABFRealmMapView的原始代表不会全部工作(但实际上,它们也只是偏离了......)!
无论如何,既然ABFRealmMapView和PVParkMap都有自己的Annotation-Views,你总是可以决定是否要进一步偏离externalDelegate-method。
在这里,我很快就让初始委托做了事情(在ABFRealmMapView.m中),而不是通过临时将externalDelegate设置为nil来进一步委托给externalDelegate。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// KOS: temporarily save external-delegate since for the annotationView we do not want to use the external one but the ABFClusterAnnotationView !
id<MKMapViewDelegate>tempDelegate = self.externalDelegate;
// KOS: set the externalDelegate temporarily to nil in order to deviate to ABFAnnotation below....
self.externalDelegate = nil;
id<MKMapViewDelegate> delegate = self.externalDelegate;
if ([delegate respondsToSelector:@selector(mapView:viewForAnnotation:)]) {
return [delegate mapView:mapView viewForAnnotation:annotation];
}
else if ([annotation isKindOfClass:[ABFAnnotation class]]) {
// KOS: set back the externalDelegate for further use in other delegate-methods
self.externalDelegate = tempDelegate;
ABFAnnotation *fetchedAnnotation = (ABFAnnotation *)annotation;
ABFClusterAnnotationView *annotationView = (ABFClusterAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ABFAnnotationViewReuseId];
if (!annotationView) {
annotationView = [[ABFClusterAnnotationView alloc] initWithAnnotation:fetchedAnnotation
reuseIdentifier:ABFAnnotationViewReuseId];
annotationView.canShowCallout = YES;
}
annotationView.count = fetchedAnnotation.safeObjects.count;
annotationView.annotation = fetchedAnnotation;
return annotationView;
}
// KOS: set back the externalDelegate for further use in other delegate-methods
self.externalDelegate = tempDelegate;
return nil;
}