0

我正在实施从我当前位置到某个目的地位置的路线指示。

当我进入特定页面时,我的应用程序崩溃。但如果我再次运行该应用程序,它会显示路线方向。

我发现问题是第一次,当前位置显示为0.00000,0.00000坐标。我第二次启动应用程序时,当前位置正确显示。

出了什么问题?我想第一次正确地得到我当前的位置。

我在下面写代码。一旦请检查出来,让我知道我的代码中的问题在哪里

#import "MapWithRoutesViewController.h"
#import "TFSViewController.h"

@implementation MapWithRoutesViewController

@synthesize locationManager,lat,lon;

- (void) updateCurrentLabel {
    NSObject *latitude = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude];
    NSObject *longitude = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude];

    locationlable.text = [NSString stringWithFormat: @"Current Location: %@,%@", latitude, longitude];
}

- (void)viewDidLoad {
    [self getCurrentLocation];
    [super viewDidLoad]; 
}

-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    [self updateCurrentLabel]; 
}

-(void) getCurrentLocation {
    MapView* mapView = [[[MapView alloc] initWithFrame:
                         CGRectMake(0, 90, self.view.frame.size.width, self.view.frame.size.height)] autorelease];      [self.view
addSubview:mapView];
    Place* home = [[[Place alloc] init] autorelease];


    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;

    if (locationManager==NO) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled"
                                                        message:@"To re-enable, please go to Settings and turn on Location Service for
this app."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    } else {
        //        if (locationManager==NO)
        //            [mapView.lo addObserver:self forKeyPath:@"location"
        // options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
        // context:nil];
    }

    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;

    [locationManager setPausesLocationUpdatesAutomatically:YES];
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];


    CLLocation *Loc = [locationManager location];
    CLLocationCoordinate2D coordinate = [Loc coordinate];

    NSObject *latitude = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.latitude];
    NSObject *longitude = [NSString stringWithFormat:@"%f", locationManager.location.coordinate.longitude];


    NSLog(@"lat,lon %@%@",latitude,longitude);

    home.name = @"";
home.description = @"";
home.latitude = coordinate.latitude;
home.longitude = coordinate.longitude; 

    Place* office = [[[Place alloc] init] autorelease];
office.name = @"";
office.description = @"";
office.latitude = 22.0000;
    office.longitude = 88.0008;

    [mapView showRouteFrom:home to:office];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated. 
}

-(IBAction)back:(id)sender{
    [self dismissViewControllerAnimated:YES completion:nil];
}

-(IBAction)tfs:(id)sender{
    TFSViewController *tfs = [[TFSViewController alloc]initWithNibName:@"TFSViewController" bundle:nil];

    [self presentViewController:tfs animated:YES completion:nil];
}

@end
4

2 回答 2

1

您应该使用委托方法 -locationManager:didUpdateLocations: 来获取位置。CLLocationManager 需要几秒钟来建立 GPS 连接并确定当前位置。

http://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/CLLocationManagerDelegate/CLLocationManagerDelegate.html#//apple_ref/occ/intfm/CLLocationManagerDelegate/locationManager:didUpdateLocations

您还可以使用 CLLocation 的 Horizo​​ntalAccuracy 属性来检查位置的准确性,以确定您是要使用该值还是丢弃它。

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocation_Class/CLLocation/CLLocation.html#//apple_ref/occ/cl/CLLocation

于 2013-07-27T02:54:27.380 回答
1

问题是您正在创建位置管理器,然后期望它在几微秒后有一个位置。您应该设置位置管理器的委托,然后等待它被调用。当 LM 有一个位置时,它将调用 didUpdateLocation 并且您可以使用它来调用 updateCurrentLabel

于 2013-07-26T21:13:15.957 回答