I set up my own location retrieval class as documented in Apple’s Core Location documentation.
MyCLControl.h:
@protocol MyCLControllerDelegate
@required
- (void)locationUpdate:(CLLocation *)location;
- (void)locationError:(NSError *)error;
@end
@interface MyCLController : NSObject <MyCLControllerDelegate, CLLocationManagerDelegate> {
CLLocationManager *locationManager;
id <MyCLControllerDelegate> delegate;
}
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (strong) id <MyCLControllerDelegate> delegate;
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation;
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error;
- (BOOL) connected;
@end
In MyCLController.m, the init and locationManager:didUpdateToLocation:fromlocation method:
- (id) init {
self = [super init];
if (self != nil) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
//locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
[self.delegate locationUpdate:newLocation];
}
The way I am calling it is as follows:
- (void)viewDidLoad {
MyCLController *locationController = [[MyCLController alloc] init];
locationController.delegate = locationController.self;
[locationController.locationManager startUpdatingLocation];
}
- (void)locationUpdate:(CLLocation *)location {
NSLog(@"%@", location);
}
I am getting a runtime error [MyCLController locationUpdate:]: unrecognized selector sent to instance once it hits [self.delegate locationUpdate:newLocation].
You have made the
MyCLControllera delegate of itself? Surely you meant to make the view the delegate instead?You also need to be checking the delegate supports the method (even though it’s
required) using: