2012-08-30 19 views
5

Sé que este error tiene algo que ver con la gestión de la memoria, pero debo admitir que estoy perplejo. ¡Ha estado programando en el objetivo c durante aproximadamente 3 semanas y todo este manejo de la memoria es confuso! Lo que básicamente está sucediendo es que tengo esta vista de mapa en una vista de tabla. Al hacer clic en el botón Atrás para salir de la vista del mapa y volver al menú principal, aparece el error anterior. Aquí es el código del archivo de cabeceraEXC_BAD_ACCESS (código = 1) Error en Xcode

#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 archivo 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í? :)

+0

He intentado comentar varias líneas de código para ver si puedo resolverlo, pero es lo mismo cada vez, ya que dije que soy bastante nuevo en esto así que cualquier ayuda, incluso con la depuración, sería apreciada :) (Lamento ser un despistado dolor en la parte posterior lol) – Craig

Respuesta

12

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

también después [mapView release]; MAPview podría estar ya se ha 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 
} 
+0

Todavía se bloquea con el mismo error me temo :( – Craig

+1

¿se puede dar como el mensaje de error completo? – vikingosegundo

+0

EXC_BAD_AC CESS (código = 1, dirección = 0xa0e69c14) pero la dirección de memoria cambia cada vez. Recién editado para agregar algo de claridad, ya que me olvidé de mencionar cuando la aplicación se bloquea>. < – Craig

0

Este error también puede ser causada por la API incompatibles (por ejemplo. Se construye para iOS 6.0, pero utiliza un método introducido sólo en iOS> = 8.2)

+1

Esto no es una respuesta, más como un comentario. – Zippy

+0

No tengo suficiente reputación para publicar comentarios, que así sea) – schmidt9

Cuestiones relacionadas