2011-08-29 21 views
5

que estoy tratando de conseguir que el usuario actual ubicación más reciente en el método didUpdateToLocation:newLocation:fromLocation:oldLocation: y almacenarlo en mi Ivar CLLocation *userCurrentLocationObtener usuario ubicación actual en MKMapView

me sale este error cuando traté de leer userCurrentLocation

-[NSCFNumber coordinate]: unrecognized selector sent to instance 0x586b220 



- (void) locationManager:(CLLocationManager *) manager 
    didUpdateToLocation:(CLLocation *) newLocation 
      fromLocation:(CLLocation *) oldLocation { 
      fromLocation:(CLLocation *) oldLocation { 
if (oldLocation == nil) { // first time loading? 
     SVGeocoder *geocodeRequest = [[SVGeocoder alloc] 
             initWithCoordinate:CLLocationCoordinate2DMake(newLocation.coordinate.latitude,  newLocation.coordinate.longitude)]; 
     [geocodeRequest setDelegate:self]; 
     [geocodeRequest startAsynchronous]; // reverse geocoding to get annotation coordinates to be placed. 
     [geocodeRequest release]; 
     isCurrentLocation = YES; //flag that next annotation placed is current location 
    } 
     userCurrentLocation = newLocation; 
NSLog(@"didUpdateToLocation - Lat:%f Long:%f", userCurrentLocation.coordinate.latitude, userCurrentLocation.coordinate.longitude); // verified that userCurrentLocation latitude is correct at this point. 
} 

botón Barra de herramientas para mostrar la ubicación actual del usuario

-(IBAction) showLocation:(id) sender { 
    NSLog(@"Lat:%f Long:%f", userCurrentLocation.coordinate.latitude, userCurrentLocation.coordinate.longitude); // crashes upon calling this statement. Why? 
    NSLog(@"Show Location Called"); 
    SVGeocoder *geocodeRequest = [[SVGeocoder alloc] 
            initWithCoordinate:CLLocationCoordinate2DMake(userCurrentLocation.coordinate.latitude, userCurrentLocation.coordinate.longitude)]; 
    [geocodeRequest setDelegate:self]; 
    [geocodeRequest startAsynchronous]; 
    [geocodeRequest release]; 

} 

que se establezca la propiedad y sintetizar userCurrentLocation como tal:

MapViewController.h

@interface MapViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate> { 
    CLLocation *userCurrentLocation; 
} 
@property (nonatomic, retain) CLLocation *userCurrentLocation; 
@end 

MapViewController.m

@synthesize userCurrentLocation; 

      /* EDITED */ 
- (void)viewDidLoad { 
    locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
[locationManager startUpdatingLocation]; 
    userCurrentLocation = [[CLLocation alloc] init]; 
} 

Respuesta

5

Su userCurrentLocation se autoreleased después del método - (void) locationManager:(CLLocationManager *) manager didUpdateToLocation:(CLLocation *) newLocation fromLocation:(CLLocation *) oldLocation terminado.

Pruebe usar self.userCurrentLocation = newLocation; en su lugar.

5
- (void)viewDidLoad { 
    mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0,46,320,370)]; 
    [mapView setDelegate:self]; 
    [mapView setShowsUserLocation:TRUE];  
    [self.view addSubview:mapView]; 
    [mapView setMapType:MKMapTypeStandard]; 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 
    if(locationManager.locationServicesEnabled) 
    { 
     [locationManager startUpdatingLocation]; 
    } 
} 
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    LatNLon = newLocation.coordinate; 
    NSLog(@"%f %f",LatNLon.latitude,LatNLon.longitude); 
    MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:LatNLon]; 
    [geocoder setDelegate:self]; 
    [geocoder start]; 
    isVisit=0; 
    [locationManager stopUpdatingLocation]; 
} 
+0

ya he hecho lo que hizo en viewDidLoad. En cuanto a la geocodificación inversa, estoy usando otra clase ('SVGeocoder') aparte de' MKReverseGeoder' de Apple. Todo funciona bien, solo que parece que leer el objeto 'userCurrentLocation' dentro de IBAction bloquea la aplicación y no puedo entender por qué. –

+0

Creo que no está obteniendo la ubicación actual del usuario. Es por eso que la aplicación falla. – Ron

0

Este es el código para UIPageControl en UIScrollView aquí estamos utilizando delegado de UIScrollView

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    int pageIndex=scrollView.contentOffset.x/scrollView.frame.size.width; 
    self.pageCntrl.currentPage=pageIndex; 
} 
+0

Recomiende que expanda esta respuesta para explicar un poco mejor por qué y cómo responde esto a la pregunta. – brandonscript

0
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
CLLocation *currentUserLocation = [locations lastObject]; 
NSLog(@"lat%f - lon%f", currentUserLocation.coordinate.latitude, currentUserLocation.coordinate.longitude); 

CLLocationCoordinate2D zoomLocation; 
zoomLocation.latitude = currentUserLocation.coordinate.latitude; 
zoomLocation.longitude= currentUserLocation.coordinate.longitude; 
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.2*METERS_PER_MILE, 0.2*METERS_PER_MILE); 
[mapView setRegion:viewRegion animated:YES]; 
[locationManager stopUpdatingLocation]; 

}

Cuestiones relacionadas