2012-10-02 2 views
1

Просто почувствовал эту странную проблему, специфичную для iOS 6. Я использовал следующие коды для привязки заданного набора адресов на iPhone карте, и он отлично работал с Ios 4 и 5. Но сбои при работе на IOS 6 со следующей трассировки стека,iOS 6 Сбой при вызове 'setRegion' с недопустимым аргументом

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid Region <center:+0.00000000, +0.00000000 span:+177.61462012, +900.00000000>'

код, я использую это просто, как это может быть,

`CLLocationCoordinate2D topLeftCoord; topLeftCoord.latitude = -90; topLeftCoord.longitude = 180;

CLLocationCoordinate2D bottomRightCoord; 
bottomRightCoord.latitude = 90; 
bottomRightCoord.longitude = -180; 

for (id<MKAnnotation> annotation in self.mapView.annotations) { 
    topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude); 
    topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude); 
    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude); 
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude); 
} 
region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.5; 
region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.5; 

region = [self.mapView regionThatFits:region]; 
[self.mapView setRegion:region animated:YES]; 

`

Так что вопрос явно с расчетом longitudeDelta я считаю, как он пытается получить доступ к неправильно долготе +900.000. Поэтому я изменил код выше

в

region.span.latitudeDelta= self.mapView.region.span.latitudeDelta /2.0002; region.span.longitudeDelta= self.mapView.region.span.longitudeDelta /2.0002;

И авария получает решена, но карта указывает на другое место в мире. Надеюсь, что один может пролить некоторые экспертные знания по этим

+0

Ваша проблема заключается в вычитании нескольких цифр.Поместите некоторые точки останова в инструкции NSLog и посмотрите, где ваша конечная строка дает вам плохие номера. Разделите каждый элемент на локальные переменные, и это будет проще. – Jessedc

+0

Я думаю, что проблема заключается в том, что областьThatFits вызывается с областью 0 –

ответ

1

Я думаю, что вы его получили:

«вопрос явно с расчетом longitudeDelta»

я испытал то же самое, что я делаю, просто:

-(void)myFunction 
{ 
    MKCoordinateRegion region; 
    region.span.longitudeDelta = 10; 
    region.center = CLLocationCoordinate2DMake(46, 2); 
    [map setRegion:region]; 
} 

Он выходит из строя после 2-го или 3-го вызова myFunction, но когда я использую latitudeDelta вместо longitudeDelta, он отлично работает.

Кроме того, журнал крах:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
    reason: 'Invalid Region <center:+46.00000000, +2.00000000 span:-1.99143220, +10.00000000>' 

Это заставляет меня думать longitudeDelta свойство вполне прослушивается.

PS: нет необходимости устанавливать longitudeDelta и latitudeDelta потому longitudeDelta = е (latitudeDelta)

0

Конечно он выходит из строя.

  1. , когда есть только один
  2. Когда есть только п одинаково расположены аннотаций

Просто рассмотреть случаи и имеют резервную область, поскольку алгоритм не может в этом случае.

например.

if(noAnnotation) setRegion: world 
if(annotationCount < 2) setRegion: region for annotation1 (with a span of e.g. 0,05/0,05) 
else 
    ... Do the algo 
    if longitudeDelta == 0 setRegion: region for annotation1 (with a span of e.g. 0,05/0,05) 
    Else setRegion: like you do now 
Смежные вопросы