28 votes

Parfois, iOS 6 MKMapView se bloque dans initWithFrame

J'ai une application sur l'apple store et après la mise à jour iOS6 j'ai des centaines de rapport de crash dans MKMapView. Je n'arrive pas à reproduire l'erreur sur mes appareils. Il ressemble à un problème avec EAGLContext. Nous n'avons pas utiliser OpenGL dans notre application, mais nous avons plus d'un cas d' MKMapView dans l'autre contrôleur. J'ai trouvé un problème similaire ici iOS 6 application se bloque dans EAGLContext lors de l'affichage des cartes , mais ils utilisent OpenGL.

Ici, il y a la trace:

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x1
Crashed Thread:  0

Thread 0 Crashed:
0   libGPUSupportMercury.dylib          0x00000e22 gpus_ReturnNotPermittedKillClient + 10
1   libGPUSupportMercury.dylib          0x3bccc5fb gldCreateContext + 190
2   GLEngine                            0x344c2b15 gliCreateContextWithShared + 676
3   OpenGLES                            0x0000491d -[EAGLContext initWithAPI:properties:] + 1433
4   OpenGLES                            0x000042d7 -[EAGLContext initWithAPI:sharedWithCompute:] + 143
5   VectorKit                           0x00011c81 -[VGLGPU init] + 105
6   VectorKit                           0x000d4659 __24+[VGLGPU sharedInstance]_block_invoke_0 + 49
7   libdispatch.dylib                   0x000014b7 _dispatch_client_callout + 23
8   libdispatch.dylib                   0x000073f7 dispatch_once_f$VARIANT$mp + 43
9   VectorKit                           0x00011c13 +[VGLGPU sharedInstance] + 39
10  VectorKit                           0x00001db1 -[VKMainLoop updateLinkState] + 485
11  VectorKit                           0x00001955 -[VKScreenCanvas _updateDisplayStatus:] + 109
12  UIKit                               0x0001c371 -[UIView initWithFrame:] + 129
13  VectorKit                           0x00010ca5 -[VGLScreenCanvas initWithFrame:context:] + 53
14  VectorKit                           0x00010a7d -[VKScreenCanvas initWithFrame:context:] + 57
15  VectorKit                           0x00010a3f -[VKScreenCanvas initWithFrame:] + 39
16  VectorKit                           0x000106bd -[VKMapCanvas initWithFrame:shouldRasterize:] + 65
17  VectorKit                           0x000104bb -[VKMapView initWithFrame:andGlobe:shouldRasterize:] + 647
18  MapKit                              0x0000dc95 -[MKMapView _commonInitAndEnableLoading:fromIB:] + 725
19  MapKit                              0x0000d811 -[MKMapView initWithFrame:] + 257
.....

24voto

stuckj Points 475

Nous avons eu un problème similaire lorsque l'utilisateur du fond de notre application tout comme nous nous éclater une fenêtre qui comprend une carte de la sous-vue. L'accident semble être le cas en raison de la carte à l'aide d'un appel openGL que nous, nous sommes backgrounded. Nous avons eu pour envelopper la carte de la sous-vue de la création dans une case comme suit:

UIApplicationState appState = [[UIApplication sharedApplication] applicationState];
    if( (appState != UIApplicationStateBackground) && (appState != UIApplicationStateInactive))
    {
        // Do map subview initialization...
    }
    else
    {
        self.attemptedToLoadMap = YES;
    }

Nous avons sauvé hors de l'bool, de sorte que si l'application revient au premier plan, on peut ajouter dans la sous-vue pour l'affichage.

Vous devez le faire à tout moment vous êtes à la manipulation de la carte d'une manière qui provoque un nouveau tirage au sort de l'opération (par exemple, l'ajout d'une annotation).

3voto

futbolpal Points 138

http://developer.apple.com/library/ios/#qa/qa1766/_index.html

Ce contrôle qualité technique résout ce problème

2voto

hunterhacker Points 366

Je fais face à une trace de pile similaire. J'ai remarqué que dans la console, cela donne plus de détails sur le problème réel: vous ne pouvez pas utiliser le GPU en arrière-plan. Les cartes avec iOS 5 étaient basées sur des tuiles, donc je suppose que je n'ai pas utilisé le GPU, mais les nouvelles cartes dans iOS 6 utilisent des graphiques vectoriels et donc le GPU. En conséquence, tout travail de carte qui était auparavant en arrière-plan ne peut plus l'être.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X