EXC_BAD_ACCESS (código = 1) Error en Xcode

Sé que este error tiene algo que ver con la gestión de la memory, pero debo admitir que estoy perplejo. ¡He estado progtwigndo en el objective c durante aproximadamente 3 semanas y toda esta memory de administración es confusa! Lo que básicamente está sucediendo es que tengo esta vista de map en una vista de tabla. Al hacer clic en el button Atrás para salir de la vista de map y volver al menu principal, aparece el error anterior. Aquí está el código del file de encabezado

#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> @interface MapViewController : UIViewController <MKMapViewDelegate> { IBOutlet MKMapView* mapView; BOOL locate; } @property (nonatomic, retain) IBOutlet MKMapView* mapView; @end 

y el file de implementación

 #import "MapViewController.h" @implementation MapViewController @synthesize mapView; // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; mapView = [[MKMapView alloc] initWithFrame:self.view.frame]; mapView.delegate=self; mapView.showsUserLocation = YES; [self.view addSubview:mapView]; [self.mapView.userLocation addObserver:self forKeyPath:@"location" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil]; locate = YES; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (locate == YES) { MKCoordinateRegion region; region.center = self.mapView.userLocation.coordinate; MKCoordinateSpan span; span.latitudeDelta = 0.1; span.longitudeDelta = 0.1; region.span = span; [self.mapView setRegion:region animated:YES]; locate = NO; } } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)dealloc { [super dealloc]; [mapView release]; [self.mapView.userLocation removeObserver:self forKeyPath:@"location"]; [self.mapView removeFromSuperview]; self.mapView = nil; } @end 

¿Alguien puede arrojar algo de luz para mí? 🙂

[super dealloc]; debe ser la última llamada en dealloc

también después de [mapView release]; mapView ya se habrá ido.

tratar

 - (void)dealloc { [self.mapView.userLocation removeObserver:self forKeyPath:@"location"]; [self.mapView removeFromSuperview]; [mapView release]; self.mapView = nil; [super dealloc]; // at this point self — that is the same object as super — is not existent anymore } 

Este error también puede ser causado por una API incompatible (por ejemplo, comstack para iOS 6.0, pero usa un método introducido solo en iOS> = 8.2)