【发布时间】:2014-05-07 00:45:33
【问题描述】:
我有一个带有特定平铺区域的应用。如果用户不在此区域并尝试在地图上显示他们的位置,我希望应用程序拒绝请求并显示警报。我认为最好的过程是:
- 用户点击将
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
为什么这会使应用程序崩溃?还有其他地方我应该检查用户的位置是否在地图内?
【问题讨论】:
-
最好的发现方法是设置异常断点。转到左侧的断点选项卡,左下角是加号。您会在那里看到菜单项。
-
是的,我知道崩溃发生的方式和位置(在 SDK 代码中)。我的问题是关于 SDK 以及我应该在哪里/如何测试用户的位置是否在 tilesource 的边界框内的更具体的问题,因为它正在崩溃。
-
把showuserLocation的SDK头声明贴出来怎么样?如果您将其设置为 FALSE(其中 == NO == 0),并且它需要一个对象(如 @0),那么如果 SDK 将该标量值放入 NSMutableSet,您就会看到确切的崩溃。
-
@Danh
showsuserLocation是一个 BOOLean 属性,它的 set 方法被覆盖,以包含一个在应用程序中发起启动用户跟踪的过程。同样,这是一个尝试找出我需要通过什么过程来防止基于使用 SDK 的区域进行用户跟踪的问题——而不是专门检查 SDK 中的错误。 -
我认为我可以帮助您的最好方法是建议对问题进行重写:标题应该类似于:“如何在 Mabbox 中从跟踪中排除区域”。正文应该是这样的:“这是我为此编写的代码,但它不起作用。事实上,它在我的源代码中的这一行上崩溃了。放将 ios 标记放回原处,并将崩溃日志替换为“崩溃日志显示 nil 插入集合”的一行。
标签: mapbox