1

iOS 6に固有のこの奇妙な問題に気づきました。次のコードを使用して、iPhoneマップに特定のアドレスのセットを固定しましたが、iO 4、5では正常に機能していました。スタックトレース、

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;

そして、クラッシュは解決されますが、マップは世界の別の場所を指します。これに関する専門知識を流せることを願っています

4

2 に答える 2

1

私はあなたがそれを得たと思います:

「問題は明らかに経度デルタの計算にあります」

私は同じことを経験しました、私がすることは簡単です:

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

の 2 回目または 3 回目の呼び出し後にクラッシュしますがmyFunctionlatitudeDelta、代わりにを使用するとlongitudeDelta完全に動作します。

さらに、クラッシュログは次のとおりです。

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

longitudeDeltaそのため、このプロパティはかなり盗聴されていると思います。

PS : longitudeDelta = f(latitudeDelta)であるため、longitudeDelta と latitudeDelta を設定する必要はありません。

于 2013-05-29T14:07:55.830 に答える