Crash on replacing map annotations
- by Alwin
Solved it, see below code
I'm trying to replace annotations on my MapView depending on the distance between user location and annotation. The annotations are getting replaced like they should, but when I touch te mapview my app crashes. This is de code I have so far:
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
for (id object in self.mapAnnotations) {
if([object isKindOfClass:[ClosedAnnotation class]])
{
ClosedAnnotation *ann = (ClosedAnnotation *)object;
CLLocation *tempLocation = [[CLLocation alloc] initWithLatitude:ann.coordinate.latitude longitude:ann.coordinate.longitude];
double distance = [self.currentLocation getDistanceFrom: tempLocation] / 1000;
[tempLocation release];
if(distance <= 1.0){
[mapView removeAnnotation:object];
OpenAnnotation *openAnnotation = [[OpenAnnotation alloc] initWithLatitude:ann.coordinate.latitude
longitude:ann.coordinate.longitude
imageSrc:[ann getImageSrcForAnnotation]
title:ann.title
tekst:[ann getTextForAnnotation]
imageSize:[ann getSizeForImage]
username:[ann getUserNameForAnnotation]
usertext:[ann getUserTextForAnnotation]];
[mapView addAnnotation:openAnnotation];
[tempArray addObject:openAnnotation];
[openAnnotation release];
} else {
[tempArray addObject:object];
}
}
else if([object isKindOfClass:[OpenAnnotation class]]){
OpenAnnotation *ann = (OpenAnnotation *)object;
CLLocation *tempLocation = [[[CLLocation alloc] initWithLatitude:ann.coordinate.latitude longitude:ann.coordinate.longitude] autorelease];
double distance = [self.currentLocation getDistanceFrom: tempLocation] / 1000;
[tempLocation release];
if(distance > 1.0){
[mapView removeAnnotation:object];
ClosedAnnotation *closedAnnotation = [[ClosedAnnotation alloc] initWithLatitude:ann.coordinate.latitude
longitude:ann.coordinate.longitude
imageSrc:[ann getImageSrcForAnnotation]
title:ann.title
tekst:[ann getTextForAnnotation]
imageSize:[ann getSizeForImage]
username:[ann getUserNameForAnnotation]
usertext:[ann getUserTextForAnnotation]];
[mapView addAnnotation:closedAnnotation];
[tempArray addObject:closedAnnotation];
[closedAnnotation release];
} else {
[tempArray addObject:object];
}
}
}
[self.mapAnnotations removeAllObjects];
[self.mapAnnotations addObjectsFromArray:tempArray];
[tempArray release];
I solved it by getting rid of the complete "two-class"-structure and handling everything within one annotation class. Works like a charm now.