iOS 6的地图偶尔会崩溃

我偶尔会碰到iOS 6 MapKit。 不能真正重现它。 什么可以导致这个?

Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x00000044 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 IMGSGX543GLDriver 0x38f231b4 sgxTextureGetImageRowBytes(GLDTextureRec*, unsigned int, unsigned int) + 8 1 IMGSGX543GLDriver 0x38f23160 CalculateChunkPlaneSizes(GLDTextureRec*, int, unsigned int*, unsigned int*, unsigned int*, unsigned int*) + 104 2 IMGSGX543GLDriver 0x38f25906 sgxConfigureTexturePrivate(GLDTextureRec*) + 82 3 IMGSGX543GLDriver 0x38f24584 glrUpdateTexture + 616 4 libGPUSupportMercury.dylib 0x342c76b6 gldLoadFramebuffer + 102 5 GLEngine 0x31b50e52 gleUpdateDrawFramebufferState + 178 6 GLEngine 0x31b52556 gleDoDrawDispatchCoreES2 + 126 7 GLEngine 0x31aedbc0 gleDrawArraysOrElements_Entries_Body + 140 8 GLEngine 0x31aea5ec glDrawArrays_ES2Exec + 160 9 VectorKit 0x3780dcd6 -[VKSkyModel drawScene:withContext:] + 326 10 VectorKit 0x377e76d6 -[VKModelObject recursiveDrawScene:whenReadyWithContext:] + 118 11 VectorKit 0x377621ea -[VKMapModel recursiveDrawScene:withContext:] + 278 12 VectorKit 0x37762096 -[VKModelObject recursiveDrawScene:withContext:] + 186 13 VectorKit 0x3775d4da -[VKScreenCanvas onTimerFired:] + 1014 14 VectorKit 0x3775b548 -[VKMapCanvas onTimerFired:] + 500 15 VectorKit 0x3775a3d2 -[VKMainLoop displayTimerFired:] + 610 16 QuartzCore 0x3095b06c CA::Display::DisplayLink::dispatch(unsigned long long, unsigned long long) + 156 17 QuartzCore 0x3095afc4 CA::Display::IOMFBDisplayLink::callback(__IOMobileFramebuffer*, unsigned long long, unsigned long long, unsigned long long, void*) + 60 18 IOMobileFramebuffer 0x331e4fd4 IOMobileFramebufferVsyncNotifyFunc + 152 19 IOKit 0x36fc4446 IODispatchCalloutFromCFMessage + 190 20 CoreFoundation 0x382a95d8 __CFMachPortPerform + 116 21 CoreFoundation 0x382b4170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32 22 CoreFoundation 0x382b4112 __CFRunLoopDoSource1 + 134 23 CoreFoundation 0x382b2f94 __CFRunLoopRun + 1380 24 CoreFoundation 0x38225eb8 CFRunLoopRunSpecific + 352 25 CoreFoundation 0x38225d44 CFRunLoopRunInMode + 100 26 GraphicsServices 0x3415f2e6 GSEventRunModal + 70 27 UIKit 0x351b72fc UIApplicationMain + 1116 28 MyApp 0x0005d78a main (main.m:14) 29 MyApp 0x0005d744 start + 36 

我find了这个。 它可以帮助你解决你的问题。

“问题:在调用presentRenderBuffer之后,基于OpenGL ES的应用程序会显示”闪烁“或”过时“帧,当OpenGL ES应用程序调用EAGL presentRenderbuffer方法时,如果不先绘制任何东西,就会出现这种情况。未初始化的像素或以前渲染的帧为了纠正这个问题,在调用presentRenderbuffer之前,你应该总是在你的framebuffer中绘制一些东西,另外请注意,除非你在你的CAEAGLLayer上设置了RetainedBackbuffer属性来保留backbuffer模式,否则渲染缓冲区的内容不能保证在调用PresentRenderbuffer后保持有效“。

-Lewis

我实际上发现与iOS版本的问题。 当我升级到6.1.3时,用户在iPad 4,iOS 6.1.2上运行,问题就消失了。 希望这有助于某人。

谢谢,Tim

我有这个确切的问题,原来是一个内存压力相关的崩溃。 当地图出现黑色背景,而不是像地图上显示的第四次或第五次时的任何瓦片或网格背景时,它一直在崩溃。 这发生在iOS 6.0和6.1以及7.0的testing版上。

我的视图控制器与地图视图从导航堆栈中移除后没有被解除分配,它对地图视图有强烈的引用,它将其保存在内存中。

确定我的泄漏后,问题消失了。

我刚刚在我的iPad上经历了这个testing应用程序。 它总是在模拟器和设备上运行没有问题,但现在它在相同的点坠毁,同样的错误。

这是我的方法 – 非常简单的地图显示用户的位置和没有注释:

 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { MKCoordinateSpan span = self.mapView.region.span; zoomLevel = span.latitudeDelta; shouldAdjustZoom = NO; } 

这是崩溃日志

 Incident Identifier: 01AE9C88-1F56-44D4-92A1-C6B5938DEBD4 CrashReporter Key: f372f86613043286b74e70a8d1f9d7b1b5313cf5 Hardware Model: iPad3,4 Process: MyApp [1247] Path: /var/mobile/Applications/C39AEC49-8DB1-45DE-B175-A6AEC19D533F/MyApp.app/MyApp Identifier: MyApp Version: ??? (???) Code Type: ARM (Native) Parent Process: launchd [1] Date/Time: 2013-07-15 08:25:16.390 +0200 OS Version: iOS 6.1.3 (10B329) Report Version: 104 Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x00000044 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 IMGSGX554GLDriver 0x32ea6be0 0x32e99000 + 56288 1 IMGSGX554GLDriver 0x32ea6b8e 0x32e99000 + 56206 2 IMGSGX554GLDriver 0x32ea92f2 0x32e99000 + 66290 3 IMGSGX554GLDriver 0x32ea7f44 0x32e99000 + 61252 

我结束了一大堆应用程序(主要是儿童游戏)在设备的后台运行,并重新启动它,然后运行良好。 也许可以帮助别人指出确切的问题,我们的应用程序中是否有任何更改可以防止崩溃。