我有view1
其中有button1
,当用户点击button 1
时,系统会跟踪用户的当前位置,并显示第二个视图view2
在用户设置搜索参数并点击button2
的情况下,点击button2
后,会显示一个显示地图的视图view3
。
现在我的问题是,如果用户至少在点击button2
之前等待1分钟,则地图显示得非常好,否则不会显示地图。
我view2
的相关代码是:
- (void)viewDidLoad {
//when this view is loaded, the user current location is tracked
self.locationManager=[[CLLocationManager alloc]init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[locationManager startUpdatingLocation];
}
#pragma mark-
#pragma mark CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
float latitude=newLocation.coordinate.latitude;
float longitude=newLocation.coordinate.longitude;
TopStationAppDelegate *topStation=(TopStationAppDelegate *)[[UIApplication sharedApplication]delegate];
topStation.latitudeUtilisateur=latitude;
topStation.longitudeUtilisateur=longitude;
NSLog(@"%f",latitude);
NSLog(@"%f",longitude);
[locationManager stopUpdatingLocation];
}
view3
中的代码产生问题:
-(void)viewWillAppear:(BOOL)animated
{
//here is the problem:
//if the user wait 1 minute before coming to this view, I mean before clicking on button2
//this view shows the map pretty well, otherwise the map is not displayed and I got brown //screen
[mapView removeAnnotations:mapView.annotations];
[mapView setMapType:MKMapTypeStandard];
TopStationAppDelegate *topStation=(TopStationAppDelegate *)[[UIApplication sharedApplication]delegate];
latitudeOfUserLocation=topStation.latitudeUtilisateur;
longitudeOfUserLocation=topStation.longitudeUtilisateur;
}
为什么我要等1分钟,我该怎么解决?
答案 0 :(得分:0)
我假设您正在尝试根据提供的代码显示用户位置。您已创建CLLocationManager
实例并要求其更新用户的当前位置。在调用委托方法之前,这需要一些时间。您可以在委托方法中设置应用委托的topStation.latitudeUtilisateur
和topStation.longitudeUtilisateur
。
假设用户在检索这些值之前移动到下一个屏幕,则不会设置上述值。您在设置之前访问了-viewWillAppear
中的数据,因此会得到陈旧或nil
数据。试图显示此位置将无法正常工作。
如果您真的希望显示用户的位置,则无法使用MKMapView
的{{1}}。将其设置为showsUserLocation
并在委托的YES
方法中处理位置更新。
如果我误解了您的问题,请告诉我。