Карта отображается только если я жду не менее 1 минуты - PullRequest
0 голосов
/ 18 мая 2011

У меня есть view1, в котором есть button1, когда пользователь нажимает на button 1, отслеживается текущее местоположение пользователя и отображается второе представление view2, где пользователь устанавливает свои параметры поиска и нажмите на button2, когда нажмете button2, появится представление view3, в котором отображается карта.

Теперь моя проблема в том, что если пользователь подождет хотя бы 1 минуту, прежде чем нажать button2, карта будет отображаться довольно хорошо, в противном случае карта не будет отображаться. Мой соответствующий код для 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 минуту, как я могу решить это?

1 Ответ

0 голосов
/ 18 мая 2011

Я предполагаю, что вы пытаетесь показать местоположение пользователя на основе предоставленного кода.Вы создали экземпляр CLLocationManager и попросили его обновить текущее местоположение пользователя.Это должно занять некоторое время, прежде чем вызывается метод делегата.Вы устанавливаете для делегата приложения topStation.latitudeUtilisateur и topStation.longitudeUtilisateur в методе делегата.

Предположим, что пользователь переходит к следующему экрану, прежде чем эти значения будут получены, указанные выше значения не будут установлены.Вы получили доступ к данным в -viewWillAppear до их установки и, следовательно, получили бы устаревшие или nil данные.Попытка показать это местоположение не будет работать должным образом.

Если вы действительно хотите отобразить местоположение пользователя, вы не можете позволить себе использовать MKMapView showsUserLocation.Установите для него значение YES и обработайте обновление местоположения в методе делегата -mapView:didUpdateUserLocation:.

Дайте мне знать, если я неправильно понял вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...