Mapbox iOS SDK setShowsUserLocation:FALSE导致崩溃

时间:2014-05-01 20:34:31

标签: mapbox

我有一个具有特定平铺区域的应用程序。如果用户位于此区域之外并尝试在地图上显示其位置,我希望应用程序拒绝该请求并显示警报。我认为最好的过程是:

  1. 用户点击按钮,将userTrackingMode设置为RMUserTrackingModeFollow并将showsuserLocation设置为TRUE。
  2. 在地图委托中,我回复mapView:didUpdateUserLocation:并检查以确保用户的位置位于mapView的tilesource边界框内。
  3. 如果用户的位置位于边界框之外,我将userTrackingMode设置为RMUserTrackingModeNone并将showsuserLocation设置为FALSE。
  4. 当我将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

    为什么这会导致应用程序崩溃?还有其他地方我应该检查用户的位置是否在地图内吗?

1 个答案:

答案 0 :(得分:0)

如果您不打算使用地图的默认行为来移动以实际跟踪用户,我建议不要更改mapView.userTrackingMode。相反,我将其保留为RMUserTrackingModeNone,实现您自己的CLLocationManager,并在用户位置的委托回调中检查它们是否符合您的条件。如果他们这样做,我会将自己的RMAnnotation添加到用户的地图中,而不是依赖于默认的RMUserLocation注释。您可以借用它的实现(在该类中以及RMMapView内)来使其看起来正确。