我创建了一个非常简单的应用程序,它使用 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)
第一次将 Google 地图集成到我们的 iOS 应用程序中后,我们遇到了同样的问题。到目前为止,似乎对我们有用的解决方案是在释放 GMSMapView 和所有相关的 Google 地图对象之后等待一段时间,然后再实例化任何 MapKit 对象。
根据迄今为止的测试,我们的想法是 GMSMapView 对象层次结构是异步释放的,并且在释放 OpenGL 资源之前似乎不会积极地将其 EAGLContext 重新建立为“当前”。因此,如果 MapKit 切换当前的 EAGLContext,那么 GMSMapView 层次结构将继续释放资源,您将获得 OpenGL 资源释放的异花授粉。
所以我们的步骤是:
- 释放GMSMapView,以及所有GMS相关对象
- 等待 100 毫秒(0.1 秒)
- 将 EAGLEContext 设置为 nil
- 分配 MKMapView 并继续。
到目前为止,这对我们来说是有效的。祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)