アプリケーションでマップを表示しようとしていますが、シミュレーターと ipod touch 4g で動作します。
しかし、iPhone でいつもエラーが発生し、なぜこれが起こるのかわかりません。失敗する理由を説明できるかもしれません。エラーは次のとおりです。
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'Invalid Region
<center:nan, nan span:nan, nan>
'
私はすでにGoogleとstackoverflowで解決策を探しましたが、誰もこの問題を抱えていないようです.
それは私のコードです:
//setup mapview
mapView.delegate = self;
mapView.showsUserLocation = YES;
//set up core location
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
//Set up zoom location
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = locationManager.location.coordinate.latitude;
zoomLocation.longitude= locationManager.location.coordinate.longitude;
debug(@"Location: %f und %f",locationManager.location.coordinate.latitude,locationManager.location.coordinate.longitude);
//zoom to location
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
[mapView setRegion:adjustedRegion animated:YES];
先ほど言ったように、iPod とシミュレーターでは動作しますが、iPhone では動作しません。
あなたが私を助けてくれることを願っています
解決:
locationManager の使用が早すぎたため、アプリがクラッシュしました。今、私はそれを次のように使用しました:
- (void)viewDidLoad {
[super viewDidLoad];
//setup mapview
mapView.delegate = self;
mapView.showsUserLocation = YES;
//set up core location
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
//Set up zoom location
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = newLocation.coordinate.latitude;
zoomLocation.longitude= newLocation.coordinate.longitude;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
[mapView setRegion:adjustedRegion animated:YES];
debug(@"Location: %f und %f",newLocation.coordinate.latitude,newLocation.coordinate.longitude);
}
この方法が 100% 正しいかどうかはわかりませんが、うまくいきます。