切换谷歌地图SDK& Mapkit在同一个应用程序中导致崩溃

时间:2013-03-15 21:08:26

标签: google-maps-sdk-ios

我创建了一个非常简单的应用程序,它使用MapKit和GoogleMaps框架,并尝试在两个地图之间切换。我正在使用ARC(ios 6.1)和Google Maps SDK for iOS版本:1.1.1.2311。在几个开关之后,应用程序与[EAGLContext setCurrentContext:]崩溃 - 始终在MapKit代码中。在之前的帖子中有一些建议 - 尝试在不同的地方设置[EAGLContext setCurrentContext:nil],但它没有帮助。

stack trace:
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000c
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   OpenGLES                        0x33beeb12 +[EAGLContext setCurrentContext:] + 74
1   VectorKit                       0x383cada4 -[VGLGPU setPaused:] + 120
2   VectorKit                       0x383bad70 -[VKMainLoop updateLinkState] + 492
3   VectorKit                       0x383c7334 -[VKAnimation startWithStepHandler:completionHandler:] + 112
4   VectorKit                       0x383d657a -[VKBuildingFootprintMapModel _reloadStyleAnimated:] + 474
5   VectorKit                       0x383d6398 -[VKBuildingFootprintMapModel setActive:] + 84
6   VectorKit                       0x383d5ef4 -[VKModelObject setSupermodel:] + 44
7   VectorKit                       0x383d624a -[VKModelObject insertSubmodel:atIndex:] + 142
8   VectorKit                       0x383d615a -[VKMapRasterizer addSubmodel:] + 322
9   VectorKit                       0x383d5cb4 -[VKMapModel addSubmodel:] + 136
10  VectorKit                       0x383cf1c4 -[VKMapModel forceMapType:] + 1532
11  VectorKit                       0x383cc568 -[VKMapModel initWithTransform:shouldRasterize:] + 2016
12  VectorKit                       0x383cbd80 -[VKMapModel initShouldRasterize:] + 36
13  VectorKit                       0x383c9678 -[VKMapCanvas initWithFrame:shouldRasterize:] + 356
14  VectorKit                       0x383c930e -[VKMapView initWithFrame:andGlobe:shouldRasterize:] + 642
15  MapKit                          0x33599320 -[MKMapView _commonInitAndEnableLoading:fromIB:] + 720
16  MapKit                          0x33598e9c -[MKMapView initWithFrame:] + 252
17  saTest                          0x00017e2a -[AppleMapCtl loadView] (AppleMapCtl.m:27)

1 个答案:

答案 0 :(得分:4)

首次将Google地图集成到我们的iOS应用中后,我们遇到了同样的问题。到目前为止,似乎对我们有用的解决方案是在发布GMSMapView和所有相关的Google Maps对象之后等待一段时间,然后再实例化任何MapKit对象。

根据我们迄今为止的测试,我们的想法是GMSMapView对象层次结构是异步发布的,并且在发布OpenGL资源之前似乎没有积极地将其EAGLContext重新建立为“当前”。因此,如果MapKit切换当前的EAGLContext,那么GMSMapView层次结构将继续释放资源,您将获得OpenGL资源释放的交叉授权。

所以我们的步骤是:

  1. 发布GMSMapView以及所有与GMS相关的对象
  2. 等待100毫秒(0.1秒)
  3. 将EAGLEContext设置为nil
  4. 分配MKMapView并继续。
  5. 到目前为止,这对我们有用。祝你好运。