我有一个具有特定平铺区域的应用程序。如果用户位于此区域之外并尝试在地图上显示其位置,我希望应用程序拒绝该请求并显示警报。我认为最好的过程是:
userTrackingMode
设置为RMUserTrackingModeFollow
并将showsuserLocation
设置为TRUE。 mapView:didUpdateUserLocation:
并检查以确保用户的位置位于mapView的tilesource边界框内。userTrackingMode
设置为RMUserTrackingModeNone
并将showsuserLocation
设置为FALSE。当我将userTrackingMode
设置为RMUserTrackingModeNone
时,没有任何不妥之处。但是当我将showsuserLocation
设置为FALSE时,我总是遇到类似于:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSSetM addObject:]: object cannot be nil'
*** First throw call stack:
(
0 CoreFoundation 0x028291e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x025a88e5 objc_exception_throw + 44
2 CoreFoundation 0x028c8a7e -[__NSSetM addObject:] + 638
3 IMAModularMapApp 0x00243b02 -[RMMapView addAnnotation:] + 146
4 IMAModularMapApp 0x00247bdb -[RMMapView locationManager:didUpdateToLocation:fromLocation:] + 7115
5 CoreLocation 0x00c7355e CLLocationCoordinate2DGetDistanceFrom + 18294
6 CoreLocation 0x00c72af4 CLLocationCoordinate2DGetDistanceFrom + 15628
7 CoreLocation 0x00c6fe40 CLLocationCoordinate2DGetDistanceFrom + 4184
...etc
为什么这会导致应用程序崩溃?还有其他地方我应该检查用户的位置是否在地图内吗?
答案 0 :(得分:0)
如果您不打算使用地图的默认行为来移动以实际跟踪用户,我建议不要更改mapView.userTrackingMode
。相反,我将其保留为RMUserTrackingModeNone
,实现您自己的CLLocationManager
,并在用户位置的委托回调中检查它们是否符合您的条件。如果他们这样做,我会将自己的RMAnnotation
添加到用户的地图中,而不是依赖于默认的RMUserLocation
注释。您可以借用它的实现(在该类中以及RMMapView
内)来使其看起来正确。