Hola, estoy jugando con las ubicaciones en el iPhone y desde el principio me encontré con problemas. He localizado mi problema y determiné que es CLLocationManager
lo que me está molestando.CLLocationManager nunca llama a los métodos de delegado
Así que desarrollaron aplicación muy sencilla. Solo tengo un controlador de vista con un CLLocationManager
en él. A la vista cargué, inicialicé CLLocationManager
y comencé a actualizar. También implementé dos métodos, didFailWithError
y didUpdateToLocation
.
He leído un montón de preguntas y lo que he aprendido hasta tarifa es esto. Debe retener CLLocationManager
durante la inicialización. También es aconsejable establecer CLLocationManagers
delegate
a nil
durante la descarga de un view
(algo que ver con los mensajes que pasan a CLLocationManager
porque marco conserva y nunca es liberar adecuadamente)
en resumen, simplemente no puedo encontrar una explicación decente en lo que a hacer y cómo hacerlo funcionar
Aquí está mi código de modo que si alguien podía entenderlo lo agradecería. viewControllers
archivo de cabecera
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface CoreLocationViewController : UIViewController <CLLocationManagerDelegate>
{
CLLocationManager *locManager;
}
@property (nonatomic, retain) CLLocationManager *locManager;
@end
archivo .m viewController
#import "CoreLocationViewController.h"
@implementation CoreLocationViewController
@synthesize locManager;
- (void)viewDidLoad
{
[super viewDidLoad];
self.locManager = [[CLLocationManager alloc] init];
locManager.delegate = self;
[self.locManager startUpdatingLocation];
self.view.backgroundColor = [UIColor grayColor];
}
#pragma mark -
#pragma mark Location Delegate
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"in fail with error");
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"in update to location");
}
#pragma mark -
#pragma mark Memory Management
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload
{
self.locManager.delegate = nil;
[super viewDidUnload];
}
- (void)dealloc
{
[locManager release];
[super dealloc];
}
@end
Por cierto: estoy usando iOS 4.2. Estoy señalar esto porque he leído que Apple ha cambiado delegados ubicación en IOS 4
Se está filtrando aquí, porque self.locManager = [[CLLocationManager alloc] init]; está reteniendo el objeto sobre el recuento de ref que se obtiene al usar alloc init. – logancautrell