我创建了一个非常简单的应用程序,它使用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)
答案 0 :(得分:4)
首次将Google地图集成到我们的iOS应用中后,我们遇到了同样的问题。到目前为止,似乎对我们有用的解决方案是在发布GMSMapView和所有相关的Google Maps对象之后等待一段时间,然后再实例化任何MapKit对象。
根据我们迄今为止的测试,我们的想法是GMSMapView对象层次结构是异步发布的,并且在发布OpenGL资源之前似乎没有积极地将其EAGLContext重新建立为“当前”。因此,如果MapKit切换当前的EAGLContext,那么GMSMapView层次结构将继续释放资源,您将获得OpenGL资源释放的交叉授权。
所以我们的步骤是:
到目前为止,这对我们有用。祝你好运。