Подтвердить что ты не робот

Исключение: "Недопустимая область <center: + inf, +0.00000000 span: +1.00000000, +0.50000000>" при попытке отобразить карту

когда я пытаюсь отобразить карту, я получил это исключение:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid Region <center:+inf, +0.00000000 span:+1.00000000, +0.50000000>'

мой соответствующий код:

-(void)viewWillAppear:(BOOL)animated
{   
    [mapView removeAnnotations:mapView.annotations];

    // locationManager update as location
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation];
    CLLocation *location = [locationManager location];
    //Configure the new event with information from the location
    CLLocationCoordinate2D coordinate = [location coordinate];

    latitudeOfUserLocation=coordinate.latitude;
    longitudeOfUserLocation=coordinate.longitude;


    location2D = (CLLocationCoordinate2D){ .latitude = latitudeOfUserLocation, .longitude = longitudeOfUserLocation };
    MyLocation *annotation=[[[MyLocation alloc]initWithName:@"You are here" distanceVersLaStation:@"" coordinate:location2D]autorelease];
    annotation.pinColor = MKPinAnnotationColorRed;  
    [mapView addAnnotation:annotation];

    MKCoordinateSpan span={latitudeDelta:1,longitudeDelta:0.5};
    MKCoordinateRegion region={location2D,span};
    [mapView setRegion:region];

}

Я не могу понять, как решить эту проблему, спасибо заранее:)

EDIT:

Привет, снова, я пытаюсь сделать то, что вы сказали, исключение решается, однако, когда я пытаюсь отобразить долготу/широту пользователя в консоли, я ничего не получил, это мой код, который является довольно правильным:

    -(void)viewWillAppear:(BOOL)animated
    {  

        [mapView removeAnnotations:mapView.annotations];

        // locationManager update as location
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self; 
        locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
        locationManager.distanceFilter = kCLDistanceFilterNone; 
        [locationManager startUpdatingLocation];
        NSURL *url=[NSURL         URLWithString:@"http://ipho.franceteam.org/ad_V1/stations/"];
    ASIFormDataRequest * request=[ASIFormDataRequest requestWithURL:url];
[request setPostValue:[NSNumber numberWithFloat:longitudeOfUserLocation] forKey:@"longitude"];
    [request setDelegate:self];
    [request startAsynchronous];
    MBProgressHUD *hud=[MBProgressHUD showHUDAddedTo:self.view animated:YES];
    [email protected]"Recherche en cours..";// this never stop loading

    }

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    CLLocation *location = [locationManager location];
    //Configure the new event with information from the location
    CLLocationCoordinate2D coordinate = [location coordinate];
    latitudeOfUserLocation=coordinate.latitude;
    longitudeOfUserLocation=coordinate.longitude;
    NSLog(@"your latitude :%f",latitudeOfUserLocation);//here nothing is shown
    NSLog(@"your longitude :%f",longitudeOfUserLocation);// and here too
    location2D = (CLLocationCoordinate2D){ .latitude = latitudeOfUserLocation, .longitude = longitudeOfUserLocation };
    MyLocation *annotation=[[[MyLocation alloc]initWithName:@"Vous êtes ici" distanceVersLaStation:@"" coordinate:location2D]autorelease];
    annotation.pinColor = MKPinAnnotationColorRed;  //or red or whatever
    [mapView addAnnotation:annotation];
    //
    MKCoordinateSpan span={latitudeDelta:1,longitudeDelta:0.5};
    MKCoordinateRegion region={location2D,span};
    [mapView setRegion:region];

}//End function

Даже я работаю над симулятором, я должен что-то получить на консоли?

РЕДАКТИРОВАТЬ: Привет, снова, у меня была возможность проверить свой код на iPhone (устройство), и я заметил, что когда я пытаюсь выполнить поиск, приложение судилось отслеживать мою позицию и находить меня станциями, которые соответствуют моему поиску (фиолетовая аннотация) однако карта не отображается, и процесс поиска по-прежнему загружается и никогда не останавливается.

[email protected]"Recherche en cours..";// this never stop loading

вот скриншот, который может объяснить лучше:

enter image description here

4b9b3361

Ответ 1

После вызова startUpdatingLocation может потребоваться несколько секунд для обновления местоположения, чтобы вы не могли сразу же получить его. Пока он не будет обновлен, в местоположении будут указаны недопустимые значения, о которых сообщает вам ошибка.

Вместо этого внедрите метод делегата locationManager:didUpdateToLocation:fromLocation: и прочитайте там место.

Переместите весь код после startUpdatingLocation к этому методу:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    CLLocation *location = [locationManager location];
    //etc...
}

Примечание: метод выше: Apple Doc

Ответ 2

В некоторых ситуациях (когда приложение становится активным из фона) метод doUpdateUserLocation запущен, но без обновленного местоположения. В этих случаях нет допустимой области, а метод setRegion: может вызывать исключение. Глупо, простое решение может проверять, действителен ли его регион до его установки:

 if(region.center.longitude == -180.00000000){
    NSLog(@"Invalid region!");
}else{
    [aMapView setRegion:region animated:YES];
}

Ответ 3

Исключено исключение "Недопустимый регион", потому что регион, который вы установили mapView, недействителен. Как я знаю сейчас, есть две причины, которые могут вызвать это исключение: центральная точка региона недействительна, или диапазон области недействителен.

Чтобы избежать этого исключения:
1) Проверьте значение центральной точки: широта находится в диапазоне [-90; 90], долгота находится в диапазоне [-180; 180]
2) Используйте [mapView regionThatFits: region], чтобы получить область с допустимым диапазоном, а затем установить mapview:
[mapView setRegion: [mapView regionThatFits: region]]

Ответ 4

[mapView setRegion:[mapView regionThatFits:region] animated:TRUE];

Ответ 5

Не может быть больше 180

CLLocationDegrees delta = MAX(maxLatitude - minLatitude, maxLongitude - minLongitude) * 1.1;

delta = points.count < 2 ? 0.5 : delta;
delta = MIN(delta, 180);

CLLocationDegrees centerX = (maxLatitude-minLatitude)/2.0 + minLatitude;
CLLocationDegrees centerY = (maxLongitude-minLongitude)/2.0 + minLongitude;

CLLocationCoordinate2D theCoordinate = {centerX,centerY};
MKCoordinateSpan span = MKCoordinateSpanMake(delta, delta);
self.mapView.region = MKCoordinateRegionMake(theCoordinate, span);