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
Ответы
Ответ 1
Я нашел это. Это может помочь вам решить вашу проблему.
"Проблема: приложение на основе OpenGL ES отображает" мигающие "или" устаревшие "кадры после вызова presentRenderBuffer.
Этот симптом может возникать, когда приложение OpenGL ES вызывает метод EAGL presentRenderbuffer без предварительного рисования чего-либо. То, что видно на экране, может содержать неинициализированные пиксели или ранее созданные кадры. Чтобы исправить эту проблему, вы всегда должны рисовать что-то в своем фреймбуфере перед вызовом presentRenderbuffer. Также обратите внимание, что, если вы не установили свойство RetainedBackbuffer на CAEAGLLayer, чтобы включить режим сохраненного backbuffer, содержимое вашего рендеринга не будет оставаться в силе после вызова presentRenderbuffer.
-Lewis
Ответ 2
Я действительно нашел проблему с версией iOS. Пользователь работал на iPad 4, iOS 6.1.2, как только я обновился до 6.1.3, проблема исчезла. Надеюсь, это поможет кому-то.
Спасибо, Тим
Ответ 3
У меня была эта точная проблема, и это оказалось крушением памяти. Для меня это постоянно грохотало, когда карта появилась с черным фоном, а не с плитками или сетчатыми фонами, как обычно, в четвертый или пятый раз, когда была показана карта. Это произошло на iOS 6.0 и 6.1 и beta 7.0.
Контроллер моего представления с видом карты не был освобожден после того, как он был удален из стека навигации, и у него была сильная ссылка на представление карты, которое хранило его в памяти.
После устранения утечки проблема исчезла.
Ответ 4
Я просто испытал это тестирование приложения на своем iPad. Он всегда запускается без проблем в симуляторе, а также на устройстве, но теперь он разбился в той же точке с той же ошибкой.
Здесь мой метод - очень простая карта, показывающая местоположение пользователя и никакие аннотации:
- (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
Я закончил целую кучу приложений (в основном игр для детей), работающих в фоновом режиме на устройстве, и перезапустил их, и затем он отлично справился. Может быть, помогает кому-то определить точную проблему и могут ли какие-либо изменения в наших приложениях предотвращать сбой.