1

MapViewでユーザーの現在地を正常に表示できます。ただし、別のView Controllerに移動してマップビューに戻ると、ブルースクリーンが表示されます。なんで?

これは私のコードです:

- (void)viewWillAppear:(BOOL)animated {

    MyManager * myManager = [MyManager sharedInstance];

    //if coming back from another screen, lets load the coordinates
    if (myManager.centerOfMap) {
        NSLog(@"myManager.centerOfMap has a value:");
        self.centerOfMap = myManager.centerOfMap;
    } 


    CLLocationCoordinate2D zoomLocation;    
    zoomLocation = *(self.centerOfMap);

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE);
    MKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion];                
    [_mapView setRegion:adjustedRegion animated:YES];      
}
4

3 に答える 3

8

ブルースクリーンは、多くの場合、アフリカの沖合(0,0)を指していることを示しています。centerOfMapの座標を印刷してみてください

于 2012-07-20T20:42:44.790 に答える
0

このビットは警報ベルを鳴らします:

CLLocationCoordinate2D zoomLocation;
zoomLocation = *(self.centerOfMap); 

これはおそらく対応します

@property (nonatomic, assign) CLLocationCoordinate2D * centerOfMap;

つまり、スタックのランダムなビットを指している可能性が高く、それ以降は上書きされています。上位ワードは0から0x4000000(0から10億-ほとんどの整数とメモリアドレスはこの範囲にあります)である可能性が高く、これは(ほぼ)0と2の間に2倍になることを意味します。

を取り除き*ます。

于 2012-07-20T22:47:56.417 に答える
0

戻ってきた時点で、MKMapViewが割り当てられていますか、それともデバッガーにnilが表示されていますか?

わからない?ビューコントローラに戻ったら、コードでブレークポイントを設定し、コンソールで「po _mapView」と入力します。結果を見てください。

nilの場合は、おそらく割り当て/初期化する必要があります。おそらく起こっていることは、メモリを節約するためにARCがMKMapViewを自動的にフラッシュしていることです。

質問ですが、新しいView Controllerをモーダルな方法で提示しています[yourMainViewController presentViewController:newViewController animated:YES]か?

于 2012-07-19T18:24:56.183 に答える