MKMapView 在 iOS 6 上显示用户位置时崩溃

Posted

技术标签:

【中文标题】MKMapView 在 iOS 6 上显示用户位置时崩溃【英文标题】:MKMapView crash on showUserLocation on iOS6 【发布时间】:2012-12-04 13:56:33 【问题描述】:

我刚刚将我的 ios SDK 更新到了最新版本 (6.0)。 我曾经在我的应用程序 MKMapView 中有几个地图视图,它们是 用于显示用户位置。

更新后,设置属性时

mapView.showUserLoaction = YES;

应用程序崩溃并出现以下异常:

-[MKCoreLocationProvider locationManager:didUpdateToLocation:fromLocation:]:无法识别 选择器发送到实例 0x155af5f0

这发生在 iPhone iOS 6.0 模拟器上,而不是在具有早期版本操作系统的设备/模拟器上。 只需设置属性即可重现错误。否则应用运行流畅。

这个错误是在更新 SDK 后出现的。此外,我还没有在 iOS 6 设备上进行测试(不过,在这种设备上的所有测试都是使用之前版本的 SDK 进行的,并且应用程序没有崩溃)。

可能是什么问题?

更新:在 iOS6 设备中没有问题。问题仅出现在 iOS 6 模拟器上

【问题讨论】:

在 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 中发布您的代码 你在代码中使用了 CLLocationManager 吗?因为这个方法属于 CLLocationManager 就是这样:我不是。在发生崩溃的控制器中,我只是设置了一个 MKMapView。然后,如果我也将 showUserLocation 属性设置为 YES,则繁荣 所以,@Eric,在这种情况下没有可显示的代码。因为我没有在 MKMapView 委托中实现该功能。 首先检查您是否已经能够获取苹果地图应用程序的当前位置.. 【参考方案1】:

你试过了吗?

[mapView setShowsUserLocation:YES];

如果您使用的是 MKMapView,如果您正在使用用户位置进行操作,您也应该使用

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation



【讨论】:

是的,我实现了那个委托。我没有尝试使用 setShowsUserLocation ,但如果可以的话,那将是完全无稽之谈。 dot 表示法和 message 表示法 在 Objective-c 中是等价的。【参考方案2】:

我正在使用这个委托方法,这在 ios6 中对我来说很好

-(void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations


【讨论】:

正如我所说,我没有在任何地方实现 CLLocationManager 委托。所以我的控制器中不需要该代码。 用我的方法替换这个方法-[MKCoreLocationProvider locationManager:didUpdateToLocation:fromLocation:]: 在哪里?我再说一遍:该方法属于 CLLocationManager 委托,我没有实现它。您无需实现 CLLocationManager 委托即可使用 MKMapView。 只需在模拟器设置>隐私>位置>中找到并且LocationService已打开。 正如我所说:“我能够从模拟器中的地图应用程序中获取当前位置”,所以这些东西已经修复了。

以上是关于MKMapView 在 iOS 6 上显示用户位置时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 MKMapView 用户位置请求失败

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

MKMapView 在 iDevice 上停止响应

iOS:每次用户加载应用程序时如何刷新 MKMapView 用户位置

iOS6 - MKMapView 当前位置蓝点

在 iPhone MKMapView 中显示用户位置蓝点