Базовое местоположение, возвращающееся 00 - PullRequest
0 голосов
/ 13 мая 2011

Вот полный метод, я не поставил вторую половину изначально, потому что я знаю, что она работает:

 -(void)showDirections
{
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [locationManager setDelegate:self];

    CLLocation *location = [locationManager location];

    CLLocationCoordinate2D coordinate = [location coordinate];
    NSNumber *myLatitude = [NSNumber numberWithDouble:coordinate.latitude];
    NSNumber *myLongitude = [NSNumber numberWithDouble:coordinate.longitude];
    double myLatitude2 = [myLatitude doubleValue];
    double myLongitude2 = [myLongitude doubleValue];


    NSArray *array = [dataHold objectForKey:@"Subtree"];
    NSString *latitude = [NSString stringWithFormat:@"%@",[array objectAtIndex:4]];
    NSString *longitude = [NSString stringWithFormat:@"%@",[array objectAtIndex:5]];
    double clubLatitude = [latitude doubleValue];
    double clubLongitude = [longitude doubleValue];
    CLLocationCoordinate2D start = { myLatitude2, myLongitude2};    
    CLLocationCoordinate2D destination = { clubLatitude, clubLongitude};        
    NSString *googleMapsURLString = [NSString stringWithFormat:@"http://maps.google.com/?saddr=%1.6f,%1.6f&daddr=%1.6f,%1.6f",start.latitude, start.longitude, destination.latitude, destination.longitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleMapsURLString]];

}

Ответы [ 2 ]

1 голос
/ 13 мая 2011

В четвертой строке вашего кода начинается проблема. Вы не можете получить местоположение мгновенно, вам нужно будет подождать, пока службы определения местоположения не уведомят делегата о том, что местоположение доступно. Я добавлю несколько комментариев к вашему коду, чтобы объяснить:

-(void)showDirections
{
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [locationManager setDelegate:self];

    // this is not where you should be looking 
    CLLocation *location = [locationManager location];

    // the rest of this function is not included in this example ...
}

Поскольку вы устанавливаете делегата как "self", текущий класс, но реализует протокол " CLLocationManagerDelegate ", который определяет следующие две функции:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { /* */ }
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { /* */ }

Именно здесь вы получите предоставленное вам местоположение.

Не забудьте обновить определение класса следующим образом:

@interface MyClass : NSObject <CLLocationManagerDelegate> {

И, как примечание, кажется, что вы не до конца понимаете делегатов и цели, которые они выполняют, что хорошо, если вы новичок в Objective-C, но знакомство с ними, безусловно, сделает вашу жизнь немного легче.

Некоторые другие полезные вещи:

1 голос
/ 13 мая 2011

Два выпуска:

1) Вы выполняете цикл NSNumber box / unbox, который бесполезен

2) Базовое местоположение является асинхронным, поэтому вы не можете сразу вернуть местоположение пользователя, вы должны использовать метод (ы) делегата для получения местоположения, если / когда оно доступно.

Вот пример того, как должен работать:

 -(void)showDirections
{
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [locationManager setDelegate:self];

    [locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    CLLocationCoordinate2D coord = [newLocation coordinate];
    NSArray *array = [dataHold objectForKey:@"Subtree"];
    NSString *latitude = [NSString stringWithFormat:@"%@",[array objectAtIndex:4]];
    NSString *longitude = [NSString stringWithFormat:@"%@",[array objectAtIndex:5]];
    double clubLatitude = [latitude doubleValue];
    double clubLongitude = [longitude doubleValue];
    NSString *googleMapsURLString = [NSString stringWithFormat:@"http://maps.google.com/?saddr=%1.6f,%1.6f&daddr=%1.6f,%1.6f", coord.latitude, coord.longitude, clubLatitude, clubLongitude];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:googleMapsURLString]];
}
...