在我的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
答
麻烦的是你正在做外景经理,然后期待它几微秒以后有一个位置的问题。你应该设置位置管理器的委托,然后等待它被调用。当LM有一个位置时,它会调用didUpdateLocation,您可以使用它调用updateCurrentLabel
答
您应该使用委托方法-locationManager:didUpdateLocations:来获取位置。 CLLocationManager需要几秒钟来建立GPS连接并确定当前位置。
你也可以使用CLLocation的horizontalAccuracy属性来检查该位置的精确度来确定,如果你想使用的值或将其丢弃。
您是否正在模拟器中检查? – iphonic
代码丢失 – whoisthis
显示一些代码的努力。您在何处实施位置更新以及分配地图属性?特别是在哪个视图控制器方法中,您正在将这些代码实现为“viewDidload”,“viewWillAppeare”?请回答这些问题。因为错误有很多可能性。 –