Получить текущее местоположение пользователя на MKMapView - PullRequest
5 голосов
/ 29 августа 2011

Я пытаюсь получить текущее последнее местоположение пользователя по методу didUpdateToLocation:newLocation:fromLocation:oldLocation: и сохранить его в моем ivar CLLocation *userCurrentLocation

Я получаю эту ошибку при попытке прочитать 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.
}

Кнопка на панели инструментов для отображения текущего местоположения пользователя

-(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];

}

Я установил свойство и синтезировал userCurrentLocation так:

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];
}

Ответы [ 4 ]

5 голосов
/ 29 августа 2011

Ваш userCurrentLocation автоматически освобожден после завершения метода - (void) locationManager:(CLLocationManager *) manager didUpdateToLocation:(CLLocation *) newLocation fromLocation:(CLLocation *) oldLocation.

Попробуйте использовать self.userCurrentLocation = newLocation;.

5 голосов
/ 29 августа 2011
- (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 голосов
/ 02 февраля 2016
    - (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];

}

0 голосов
/ 27 января 2015

Это код для UIPageControl в UIScrollView здесь мы используем делегат UIScrollView

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    int pageIndex=scrollView.contentOffset.x / scrollView.frame.size.width;
    self.pageCntrl.currentPage=pageIndex;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...