Cómo encontrar su ubicación actual con CoreLocation

Necesito encontrar mi ubicación actual con CoreLocation , probé varios métodos pero hasta ahora mi CLLocationManager solo ha devuelto 0’s .. ( 0.000.00.000 ).

Aquí está mi código ( actualizado para funcionar ):

Importaciones :

 #import  

Declarado :

 IBOutlet CLLocationManager *locationManager; IBOutlet UILabel *latLabel; IBOutlet UILabel *longLabel; 

Funciones :

 - (void)getLocation { //Called when needed latLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude]; longLabel.text = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude]; } - (void)viewDidLoad { locationManager = [[CLLocationManager alloc] init]; locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m [locationManager startUpdatingLocation]; } 

Puede encontrar su ubicación usando CoreLocation esta manera:

importar CoreLocation :

 #import  

Declarar CLLocationManager :

 CLLocationManager *locationManager; 

Inicialice el locationManager en viewDidLoad y cree una función que pueda return la ubicación actual como un NSString :

 - (NSString *)deviceLocation { return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude]; } - (void)viewDidLoad { locationManager = [[CLLocationManager alloc] init]; locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m [locationManager startUpdatingLocation]; } 

Y al llamar a la función deviceLocation devolverá la ubicación como se esperaba:

 NSLog(@"%@", [self deviceLocation]); 

Esto es solo un ejemplo. Inicializar CLLocationManager sin que el usuario esté listo no es una buena idea. Y, por supuesto, locationManager.location.coordinate se puede usar para obtener latitude y longitude a voluntad después de que CLLocationManager se haya inicializado.

No olvide agregar el CoreLocation.framework de CoreLocation.framework en la configuración de su proyecto en la pestaña Targets->Build Phases->Link Binary ( Targets->Build Phases->Link Binary ).

Con CLLocationManager no es necesario obtener la información de ubicación inmediatamente. Es posible que el GPS y otros dispositivos que obtienen información de ubicación no se hayan inicializado. Pueden tomar un tiempo antes de que tengan información. En su lugar, debe crear un objeto delegado que responda a locationManager:didUpdateToLocation:fromLocation: y luego locationManager:didUpdateToLocation:fromLocation: como el delegado del administrador de ubicación.

ver aquí

Aquí puede mostrar la ubicación actual con detalles de anotación

en ViewController.h

 #import  #import  //My #import  #import  @interface ViewController : UIViewController { IBOutlet UILabel *lblLatitiude; IBOutlet UILabel *lblLongitude; IBOutlet UILabel *lblAdress; } //My @property (nonatomic, strong) IBOutlet MKMapView *mapView; -(IBAction)getMyLocation:(id)sender; @end 

en ViewController.m

 #import "ViewController.h" @interface ViewController () @end @implementation ViewController{ CLLocationManager *locationManager; CLGeocoder *geocoder; CLPlacemark *placemark; } @synthesize mapView; - (void)viewDidLoad { [super viewDidLoad]; locationManager = [[CLLocationManager alloc] init]; geocoder = [[CLGeocoder alloc] init]; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *defaultsDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"pradipvdeore@gmail.com", @"fromEmail", @"pavitrarupani89@gmail.com", @"toEmail", @"smtp.gmail.com", @"relayHost", @"mobileapp.qa@gmail.com", @"login", @"mobile@123", @"pass", [NSNumber numberWithBool:YES], @"requiresAuth", [NSNumber numberWithBool:YES], @"wantsSecure", nil]; [userDefaults registerDefaults:defaultsDictionary]; self.mapView.delegate=self; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Custom Methods -(IBAction)getMyLocation:(id)sender{ locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; } #pragma mark - CLLocationManagerDelegate - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"didFailWithError: %@", error); UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [errorAlert show]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"didUpdateToLocation: %@", newLocation); CLLocation *currentLocation = newLocation; if (currentLocation != nil) { lblLongitude.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; lblLatitiude.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; } // Stop Location Manager [locationManager stopUpdatingLocation]; // Reverse Geocoding NSLog(@"Resolving the Address"); [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"Found placemarks: %@, error: %@", placemarks, error); if (error == nil && [placemarks count] > 0) { placemark = [placemarks lastObject]; lblAdress.text = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@", placemark.subThoroughfare, placemark.thoroughfare, placemark.postalCode, placemark.locality, placemark.administrativeArea, placemark.country]; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(currentLocation.coordinate, 800, 800); [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES]; // Add an annotation MKPointAnnotation *point = [[MKPointAnnotation alloc] init]; point.coordinate = currentLocation.coordinate; point.title = @"Where am I?"; point.subtitle = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@", placemark.subThoroughfare, placemark.thoroughfare, placemark.postalCode, placemark.locality, placemark.administrativeArea, placemark.country]; [self.mapView addAnnotation:point]; } else { NSLog(@"%@", error.debugDescription); } } ]; } //My - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation { MKAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"loc"]; annotationView.canShowCallout = YES; annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; return annotationView; } - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { [self getSignScreenShot]; MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init]; controller.mailComposeDelegate = self; [controller setSubject:@"My Subject"]; [controller setMessageBody:@"Hello there." isHTML:NO]; if (controller) [self presentModalViewController:controller animated:YES]; } - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error; { if (result == MFMailComposeResultSent) { NSLog(@"It's away!"); } [self dismissModalViewControllerAnimated:YES]; } //----------------------------------------------------------------------------------- //This methos is to take screenshot of map //----------------------------------------------------------------------------------- -(UIImage *)getSignScreenShot { CGRect rect = CGRectMake(self.mapView.frame.origin.x,self.mapView.frame.origin.y-50,self.mapView.frame.size.width+60,self.mapView.frame.size.height+15); UIGraphicsBeginImageContextWithOptions(self.mapView.frame.size, NO, 1.0); [self.mapView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext(); CGImageRef imageRef = CGImageCreateWithImageInRect([screenshot CGImage], rect); UIImage *newImage = [UIImage imageWithCGImage:imageRef]; return newImage; }