3

MapKit と GoogleMaps フレームワークを使用する非常に単純なアプリを作成し、2 つのマップを切り替えようとしました。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)
4

1 に答える 1

4

最初に Google マップを iOS アプリに統合した後も、同じ問題が発生していました。これまでのところ、うまくいくと思われる解決策は、GMSMapView と関連するすべての Google マップ オブジェクトを解放した後、MapKit オブジェクトをインスタンス化する前に、しばらく待つことでした。

これまでのテストに基づいて、GMSMapView オブジェクト階層は非同期に解放され、OpenGL リソースを解放する前にその EAGLContext を「現在の」ものとして積極的に再確立していないように思われます。したがって、MapKit が現在の EAGLContext を切り替えた場合、GMSMapView 階層はリソースの解放を続行し、OpenGL リソースの解放の相互受粉を取得します。

したがって、私たちの手順は次のとおりです。

  1. GMSMapView とすべての GMS 関連オブジェクトを解放する
  2. 100ミリ秒(0.1秒)待つ
  3. EAGLEContext を nil に設定する
  4. MKMapView を割り当てて続行します。

これまでのところ、これはうまくいきました。幸運を。

于 2013-03-15T21:31:04.710 に答える