1

我能够成功地向用户显示他们在 MapView 上的当前位置。但是,当我转到另一个视图控制器并返回我的地图视图时,我看到一个蓝屏。为什么?

这是我的代码:

- (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 之间的双精度字。

摆脱*.

于 2012-07-20T22:47:56.417 回答
0

在你回来的时候,是 MKMapView 分配了还是在调试器中显示 nil ?

没有把握?当您回到视图控制器时,在代码中继续设置断点,然后在控制台中键入“ po _mapView”。看看结果。

如果它是 nil,你可能必须 Alloc/Init 它。可能发生的情况是 ARC 会自动刷新 MKMapView 以节省内存。

只是一个问题,您是否使用模态方式呈现新的视图控制器[yourMainViewController presentViewController:newViewController animated:YES]

于 2012-07-19T18:24:56.183 回答