我正在IOS中编写程序,我用地图标记地图上的几个点。 现在我有dequereusableannotationview代码,可以正常使用ONE引脚,但崩溃我使用两个引脚或尝试在地图上标记两个点。 只有当我注释掉一个注释或注释掉dequeucode时,它才有效 但问题是......我甚至需要那个出列代码吗?因为我将拥有的最多的针脚可能是...... 10 ..?
谢谢你
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
MKMapView *mv=[[MKMapView alloc]initWithFrame:CGRectZero];
mv.delegate=self;
[self setView:mv];
MapAnnotation* ann=[[MapAnnotation alloc]init];
CLLocationCoordinate2D location;
location.latitude=(double)51.501468;
location.longitude=(double)-0.141596;
[ann setCoordinate:location];
[ann setTitle:@"test"];
[ann setTitle:@"plz work"];
[mv addAnnotation:ann];
[ann release];
MapAnnotation* AnnB=[[MapAnnotation alloc]init];
CLLocationCoordinate2D locationB;
locationB.latitude=(double)16.4944;
locationB.longitude=(double)-151.7364;
[AnnB setCoordinate:locationB];
[AnnB setTitle:@"test"];
[AnnB setSubtitle:@"work"];
[mv addAnnotation:AnnB];
[AnnB release];
}
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
MKPinAnnotationView *pinView=nil;
if (annotation!=mapView.userLocation) {
static NSString *defaultID=@"MYLoction";
pinView=(MKPinAnnotationView *)[mapView
dequeueReusableAnnotationViewWithIdentifier:defaultID];
if (pinView=nil) {
pinView=[[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:defaultID]autorelease];
pinView.pinColor=MKPinAnnotationColorPurple;
pinView.canShowCallout=YES;
pinView.animatesDrop=YES;
}
}
}
答案 0 :(得分:0)
一个问题是当您在
中测试相等性时if (pinView=nil) {
您正在使用赋值运算符=
,而不是等于运算符==
。这将导致nil
每次都被分配到pinView
,因此您永远不会重复使用注释。我很惊讶编译器没有抓住这个。
另外,您实际上并没有在viewForAnnotation:
中返回任何内容。试试这个:
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:
(id<MKAnnotation>)annotation {
if(annotation == mapView.userLocation) {
return nil;
}
static NSString *defaultID=@"MYLoction";
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView
dequeueReusableAnnotationViewWithIdentifier:defaultID];
if (!pinView) {
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:defaultID] autorelease];
pinView.pinColor=MKPinAnnotationColorPurple;
pinView.canShowCallout=YES;
pinView.animatesDrop=YES;
}
return pinView;
}
答案 1 :(得分:0)
尝试使用适当的更改此代码。以下代码适合我。
(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {
static NSString * identifier = @“MyLocation”;
if([annotation isKindOfClass:[MNMyLocation class]]){
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [atmLocatorMap dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
} else {
annotationView.annotation = annotation;
}
annotationView.enabled = YES;
annotationView.canShowCallout = YES;
//annotationView.image=[UIImage imageNamed:@"arrest.png"];
return annotationView;
}
返回零;
} `