在我的iphone中显示当前位置

问题描述:

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

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

我发现问题是第一次,当前位置显示为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 
+0

您是否正在模拟器中检查? – iphonic

+2

代码丢失 – whoisthis

+0

显示一些代码的努力。您在何处实施位置更新以及分配地图属性?特别是在哪个视图控制器方法中,您正在将这些代码实现为“viewDidload”,“viewWillAppeare”?请回答这些问题。因为错误有很多可能性。 –

麻烦的是你正在做外景经理,然后期待它几微秒以后有一个位置的问题。你应该设置位置管理器的委托,然后等待它被调用。当LM有一个位置时,它会调用didUpdateLocation,您可以使用它调用updateCurrentLabel

您应该使用委托方法-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