问题描述:

I added a plist database to store information for annotations in a MKMapView. Once I implemented the code to grab the information, my delegate methods are no longer being called.

The code I added was:

- (void)viewDidLoad

{

NSMutableArray *annotations = [[NSMutableArray alloc]init];

NSString *path = [[NSBundle mainBundle] pathForResource:@"MillersStores" ofType:@"plist"];

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];

NSArray *anns = [dict objectForKey:@"Root"];

for(int i = 0; i < [anns count]; i++) {

float realLatitude = [[[anns objectAtIndex:i] objectForKey:@"Latitude"] floatValue];

float realLongitude = [[[anns objectAtIndex:i] objectForKey:@"Longitude"] floatValue];

MillersLocations *myAnnotation = [[MillersLocations alloc] init];

CLLocationCoordinate2D theCoordinate;

theCoordinate.latitude = realLatitude;

theCoordinate.longitude = realLongitude;

myAnnotation.coordinate = theCoordinate;

myAnnotation.title = [[anns objectAtIndex:i] objectForKey:@"Title"];

myAnnotation.subtitle = [[anns objectAtIndex:i] objectForKey:@"Address"];

[mapView addAnnotation:myAnnotation];

[annotations addObject:myAnnotation];

[myAnnotation release];

}

}

And this is one of delegate method that's no longer being called is:

- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation {

if ([annotation isKindOfClass:[MKUserLocation class]])

return nil;

MKPinAnnotationView *pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease];

pinView.pinColor = MKPinAnnotationColorRed;

pinView.animatesDrop = YES;

pinView.canShowCallout = YES;

UIImageView *leftIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MillersAnnotation.png"]];

pinView.leftCalloutAccessoryView = leftIconView;

UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

pinView.rightCalloutAccessoryView = rightButton;

return pinView;

}

I have another delegate method in there that also zooms into the User's Location that's not being called either, as well as the calloutAccessoryControlTapped method that's no longer being called.

I know it has something to do with the new code, but I'm confused as to how to even debug this because it's not giving me errors and I can't log it because the entire methods aren't even being called. When I get rid of the new code, the old code works fine...What is it in the new code that negates the old code?

网友答案:

It sounds like the map view's delegate property is not set.

Did the old code contain this line:

mapView.delegate = self;

Add that to viewDidLoad or, in IB, connect the map view's delegate outlet to File's Owner.

相关阅读:
Top