わかりました、それで私はこの問題を抱えています。私がやりたいのは、地図に複数の注釈を手動で追加することです。注釈を1つだけ追加すると、問題なく機能します。ピンが落ちます、あなたはそのコールアウトを見るためにそれをクリックすることができます、人生は良いです。
複数追加したいときに問題が発生します。2つ目を追加すると、突然ピンの色が正しくなくなります(つまり、大きさによっては特定の色になるはずですが、両方とも同じになります…)。さらに重要なのは、ピンをクリックすると、ピンが表示されることです。コールアウト、アプリはexex_bad_accessでクラッシュします。何が問題なのか本当にわかりません。マップに追加するビューが多すぎるのではないでしょうか。しかし、それはたった9つのピンであり、ピン自体は問題なく追加されます。これが私のコードです…</p>
- (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;
}
2番目の関数を削除しようとしましたが、何もしませんでした。
助けてくれてありがとう!PS私も追加する必要があります。通常、注釈をクリックすると機能する9つのピンのうち1つまたは2つのピンがあります…</ p>
プログラムで手動で2つの注釈だけを手動で実行しようとしても(つまり、ループを削除しようとすると)、それでも失敗し、色が間違っています...