好的,所以我遇到了這個問題。我想要做的是手動添加多個註釋到地圖。當我只添加一個註釋時,它完美地工作。銷滴,你可以點擊它看到它的標註,生活是美好的。將多個註釋添加到地圖時出現問題
問題來了,當我想添加多個。當我添加第二個時,突然針的着色不正確(即取決於它們的大小,它們應該是某種顏色,但它們現在都是相同的......),更重要的是當你點擊它們時,看到它們標註,該應用程序崩潰與exex_bad_access。我真的不知道什麼是錯的,也許我在地圖上添加了太多的視圖?但它只有9個引腳,引腳本身也很好。 這裏是我的代碼...
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *stops = [[NSMutableArray alloc] init]; //Get list of all the stops available
Bus *bus1 = [[Bus alloc] init]; // Bus 1 holds the stops
stops = [bus1 returnStops];
for (NSString *stop in stops) //Go through each stop to add annotation to map
{
Bus *bus2 = [bus1 initWithStop:stop]; //Create an instance of bus with a given stop
MapAnnotation *eqAnn = [MapAnnotation annotationWithBus:bus2];
[self.mapView addAnnotation:eqAnn]; //Add the annotation to the map
//[eqAnn release];
//[bus2 release];
}
[self recenterMap];
[stops release];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView *view = nil;
if(annotation != mapView.userLocation) {
MapAnnotation *eqAnn = (MapAnnotation*)annotation;
view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@"busLoc"];
if(nil == view) {
view = [[[MKPinAnnotationView alloc] initWithAnnotation:eqAnn
reuseIdentifier:@"busLoc"] autorelease];
}
CGFloat magnituide = [eqAnn.bus.magnitude floatValue];
if(magnituide >= .80f) {
[(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorRed];
} else if(magnituide >= .60f) {
[(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorPurple];
} else
{
[(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorGreen];
}
[(MKPinAnnotationView *)view setAnimatesDrop:YES];
[view setCanShowCallout:YES];
}
return view;
}
甚至試圖消除第二個功能,但它沒有做任何事情。
感謝您的幫助! PS我也應該補充一點,通常有一個或兩個針腳出現在9中,當你點擊註釋時它會起作用...
如果我甚至嘗試在程序中手工操作兩個註釋(即刪除循環) ,它仍然失敗,顏色仍然是錯誤的...
另外,我要補充的是,如果我手動兩個註解添加到地圖上,以同樣的方式的東西崩潰。 總線BUS2 * = [BUS1 initWithStop:[停止objectAtIndex:0]; MapAnnotation * eqAnn = [MapAnnotation annotationWithBus:BUS2]; [self.mapView addAnnotation:eqAnn]; 總線BUS2 * = [BUS1 initWithStop:停止objectAtIndex:1]; MapAnnotation * eqAnn = [MapAnnotation annotationWithBus:bus2]; [self.mapView addAnnotation:eqA NN]; 這仍然失敗。 – kodai 2009-08-17 18:53:07