2012-03-23 5 views
3

Je vois un crash étrange dans l'une de mes applications qui semble provenir d'une méthode privée sur UIAlertView. J'ai fait quelques recherches et trouvé quelques autres références à cette méthode étant impliqué dans des accidents tels que here, mais je ne suis pas convaincu que la cause est la même. Cependant, pour être certain que j'ai toujours mis le délégué UIAlertView à zéro chaque fois que le délégué est libéré.Crash sur la méthode privée de UIAlertView

La trace de la pile est la suivante:

Exception Type: SIGABRT 
Exception Codes: #0 at 0x351ce32c 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libsystem_kernel.dylib    0x351ce32c __pthread_kill + 8 
1 libsystem_c.dylib     0x370c329f abort + 95 
2 eLogbook       0x000bbacd -[GetOperationPartsDictionary init] (GetOperationPartsDictionary.m:22) 
3 UIKit        0x32557f93 -[UIAlertView(Private) _popoutAnimationDidStop:finished:] + 855 
4 UIKit        0x3240dc53 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 471 
5 UIKit        0x3241357d -[UIViewAnimationState animationDidStop:finished:] + 53 
6 QuartzCore       0x36eeac2f CA::Layer::run_animation_callbacks(void*) + 203 
7 libdispatch.dylib     0x3140ae91 _dispatch_main_queue_callback_4CF$VARIANT$up + 197 
8 CoreFoundation      0x353ad2ad __CFRunLoopRun + 1269 
9 CoreFoundation      0x353304a5 CFRunLoopRunSpecific + 301 
10 CoreFoundation      0x3533036d CFRunLoopRunInMode + 105 
11 GraphicsServices     0x3662c439 GSEventRunModal + 137 
12 UIKit        0x32426e7d UIApplicationMain + 1081 
13 eLogbook       0x0007767f main (main.m:14) 

Ce qui est vraiment me source de confusion à ce sujet est que la méthode -[UIAlertView(Private) _popoutAnimationDidStop:finished:] semble appeler la méthode init sur ma classe GetOperationPartsDictionary. De la quantité limitée d'informations que j'ai reçues des utilisateurs, ce crash se produit au démarrage, à quel point cette classe n'aurait pas été chargée. J'utilise QuincyKit pour envoyer les rapports d'erreur à un serveur, d'où ils sont symbolisés en utilisant le script standard symbolicatecrash. La version de Xcode utilisée pour symboliser le crash est la même que celle utilisée pour construire le binaire, et je suis confiant que le dSYM utilisé pour symboliser le crash est le bon - les numéros de ligne pour mon code sont corrects par exemple .

Quelqu'un a des commentaires à ce sujet? Edit: aurait dû ajouter que cela se produit sur le terrain avec une application en direct, mais seulement de temps en temps. Cela a affecté peut-être un ou deux utilisateurs sur mille, mais je n'ai jamais pu le reproduire sur un appareil ou dans le simulateur.

+0

Regarde mes dernières questions de traquer les erreurs de SIGABRT. lire spécifiquement les commentaires après la réponse pour utiliser le point d'arrêt sur toute exception. http://stackoverflow.com/questions/8072135/how-to-track-down-cause-of-sigabrt –

+0

Merci, mais j'aurais dû mentionner que je ne peux pas le reproduire moi-même sur le simulateur ou sur un appareil, Je viens de modifier la question initiale. Par conséquent, les points d'arrêt ne vont pas aider :( – yod

+0

@yod Post du code afin que nous puissions vous aider. –

Répondre

0

On dirait que vous avez appelé le UIAlertViewDelegate après la publication de l'alerte.

Libérez-seulement dans la méthode dealloc comme ceci:

-(void)dealloc { 
    self.alertView.delegate = nil; //setting delegate to nil 
    self.alertView = nil; //if you have defined alert as property 
    //other release statements of your controller 
    [super dealloc]; 
} 
Questions connexes