Pregunta

I have a GPSTestViewController class that has a MKMapView with added MKAnnotations (stored in a class called Bases). I'm trying to continuously update the coordinates for the MKAnnotations (with the updateBaseInformation method in Bases) so the bases is moving on the map. The update is invoked from the GPSTestViewController method locationUpdate (since it's called every second):

- (void)locationUpdate:(CLLocation *)location {
    NSLog(@"locationUpdate");
    self.cachedLocation = location;
    [self centerTo:cachedLocation.coordinate];
    //Trying to update the coordinates every second
    [bases updateBaseInformation];   <--Program received signal: “EXC_BAD_ACCESS”
    return;
}

But then I get the following message: [bases updateBaseInformation]; Program received signal: “EXC_BAD_ACCESS”

Bases.m contains the following code (and even when some code is commented it crashes):

- (void)updateBaseInformation {
   NSLog(@"Updating base information");
   for(MyAnnotation *a in bases)
   {
       //CLLocationCoordinate2D c;
       if([a.type compare:@"friend"] == 0)
       {
           //c.latitude = a.coordinate.latitude+0.001;
           //c.longitude = a.coordinate.longitude+0.001;
           //a.coordinate = c;
       }
       else if([a.type compare:@"enemy"] == 0)
       {
       //[a setCoordinate:CLLocationCoordinate2DMake(a.coordinate.latitude+0.002, a.coordinate.longitude+0.0012)];
       }
   }

}

My guess is that I'm accessing the objects that are already accessed somewhere else and that causes the EXC_BAD_ACCESS. I have spent many hours on searching, but without results. Why do I get this error and how should I do in order to make the Annotations move around on the map?

I have uploaded the complete project to (link removed).

Solution The problem is now solved. The problem was that the array that holds the Annotations was autoreleased. So I changed the allocation from

bases = [NSMutableArray array];

to

bases = [[NSMutableArray array] retain];

Thanks in advance.

¿Fue útil?

Solución

My guess is that I'm accessing the objects that are already accessed somewhere else

You are probably accessing an object that no longer exists in memory - You need to check you are not deallocating an object which you are subsequently accessing. You should turn on Zombies for your scheme which will allow you to see when you are accessing a deallocated object by effectively keeping an object's memory under watch after the object has been deallocated. You can switch them on here: Scheme/edit scheme/enable zombie objects.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top