MKMapView 区域属性返回错误结构

Posted

技术标签:

【中文标题】MKMapView 区域属性返回错误结构【英文标题】:MKMapView region property returning bad struct 【发布时间】:2013-04-18 19:47:25 【问题描述】:

我正在使用 MKMapKit 并将区域设置为全尺寸的美国,并且它按预期显示。但是,在检查 self.mapView.region 属性时,我得到了一些奇怪的结果,这些结果会影响我稍后在程序中的计算。

这是我设置地图视图的方式:

- (void)viewDidLoad

    [super viewDidLoad];
    MKCoordinateRegion usa = MKCoordinateRegionMake(CLLocationCoordinate2DMake(39.4, -91.5), MKCoordinateSpanMake(40, 40));
    self.mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:self.mapView];
    self.mapView.region = usa;
    self.mapView.delegate = self;
    self.mapView.showsUserLocation = YES;
    [self.mapView.userLocation addObserver:self forKeyPath:@"location" options:0 context:nil];

这是美国MKCoordinateRegion,看起来不错,而且工作正常:

(lldb) p usa
(MKCoordinateRegion) $0 = 
  (CLLocationCoordinate2D) center = 
    (CLLocationDegrees) latitude = 39.4
    (CLLocationDegrees) longitude = -91.5
  
  (MKCoordinateSpan) span = 
    (CLLocationDegrees) latitudeDelta = 40
    (CLLocationDegrees) longitudeDelta = 40
  

然后我设置区域self.mapView.region = usa; 并在它之后中断,这现在是self.mapView.region 的输出。

(lldb) p [self.mapView region]
(MKCoordinateRegion) $1 = 
  (CLLocationCoordinate2D) center = 
    (CLLocationDegrees) latitude = 39.4
    (CLLocationDegrees) longitude = 39.4
    (CLLocationDegrees) latitudeDelta = 39.4
    (CLLocationDegrees) longitudeDelta = -91.5
  
  (MKCoordinateSpan) span = 
    (CLLocationDegrees) latitude = 66.4999527377778
    (CLLocationDegrees) longitude = 66.4999527377778
    (CLLocationDegrees) latitudeDelta = 66.4999527377778
    (CLLocationDegrees) longitudeDelta = 67.4999957172512
  
  (CLLocationCoordinate2D) center = 

所以问题是中心结构错误,经度关闭,CLLocationCoordinate2D 甚至不应该有增量字段,它看起来像 MKCoordinateSpan

CLLocationCoordinate2D 定义:

typedef struct CLLocationDegrees latitude; CLLocationDegrees longitude; CLLocationCoordinate2D;

所以知道我哪里出错了吗?我错过了一些非常明显的东西吗?如果这是错误的方法,我怎样才能获得真实数据以便稍后在应用程序中进行一些计算?

使用 xcode 4.6.1 和 ios 6.1 模拟器。

【问题讨论】:

您使用什么语言?任何地方都没有逗号或分号。我觉得这很奇怪。 对不起是objective-c,其他输出是xcode中lldb调试器输出的结构体。 啊,我错过了它是输出,并认为这是你设置 usa 的输入。 【参考方案1】:

我认为这只是一个 lldv 错误或我的 lldb 使用中的错误。如果我 NSLog 纬度/经度,一切都很好。

【讨论】:

以上是关于MKMapView 区域属性返回错误结构的主要内容,如果未能解决你的问题,请参考以下文章

如何使用蓝点在我的 MKMapView 上显示我当前的位置和区域?

如何使 MKMap 适合指定的 View-Region?

MKMapView 与其区域属性未对齐

如何使 MKMapView 从顶部进入

MKMapView - 未调用 rendererForOverlay

iOS 5 中无效的 MKMapView 区域