Хорошо, значит, у меня есть эта проблема. Что я хочу сделать, так это вручную добавить несколько аннотаций на карту. Когда я добавляю только одну аннотацию, она работает безупречно. Булавка падает, вы можете нажать на нее, чтобы увидеть ее выноску, жизнь удалась.
Проблема возникает, когда я хочу добавить более одного. Когда я добавляю второй, вдруг булавки не окрашиваются правильно (т.е. в зависимости от их величины они должны быть определенного цвета, но теперь они оба одинаковы...), и, что более важно, когда вы нажимаете на них, чтобы увидеть их callout, приложение аварийно завершает работу с 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;
}
даже пытался удалить вторую функцию, но это ничего не дало.
Спасибо за помощь! P.S Я также должен добавить, что обычно один или два контакта из 9 срабатывают, когда вы нажимаете на аннотацию…
Если я даже попытаюсь вручную вручную сделать две аннотации в программе (т.е. удалить цикл), это все равно не удастся, и цвет все равно будет неправильным...