3

アプリケーションでマップを表示しようとしていますが、シミュレーターと 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% 正しいかどうかはわかりませんが、うまくいきます。

4

0 に答える 0