Il semble que vous vous poser deux questions: comment définir un niveau supérieur gestionnaire d'exception; et la façon de traiter la question de la détermination de ce que la cause est.
La capture de l'exception qui peut être fait de plusieurs façons différentes, mais pour cela, la meilleure approche semble être de définir un gestionnaire d'exception à l'aide de NSSetUncaughtExceptionHandler.
Lorsqu'une exception est déclenchée dans votre application, il est géré par un gestionnaire d'exceptions par défaut. Ce gestionnaire ne fait rien de plus que l'enregistrement d'un message à la console avant l'application se ferme. Vous pouvez contourner ce problème en définissant vous propre gestionnaire d'exception à l'aide de la fonction indiquée ci-dessus. Le meilleur endroit pour le faire, ce serait dans l'app délégué applicationDidFinishLaunching: la méthode.
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
NSSetUncaughtExceptionHandler(&myExceptionHandler);
}
Une fois que vous avez défini un gestionnaire personnalisé, vous aurez envie de développer sur la sortie par défaut pour vous aider à déterminer quelle est la cause.
void myExceptionHandler(NSException *exception)
{
NSArray *stack = [exception callStackReturnAddresses];
NSLog(@"Stack trace: %@", stack);
}
Malheureusement, par rapport à OSX iPhone semble assez limitée en ce qui concerne la production d'une belle trace de la pile. Le code ci-dessus va produire certains apparemment indésirable de sortie; toutefois, vous pouvez exécuter cette sortie dans les atos de l'outil, et vous devriez être en mesure de générer un utile trace de la pile.
Une autre option est de suivre les instructions sur http://rel.me/2008/12/30/getting-a-useful-stack-trace-from-nsexception-callstackreturnaddresses/ (lien mort) , qui aidera à produire une belle trace de la pile automatiquement.
Que cela va à des beta-testeurs, vous pouvez avoir à bricoler sur le point de le faire fonctionner pour vous.
Vous dites que vous n'avez pas été en mesure de reproduire le problème vous-même, seulement à vos utilisateurs. Dans ce cas, vous pourriez trouver cette note technique d'Apple utiles:
http://developer.apple.com/iphone/library/technotes/tn2008/tn2151.html
Mise à JOUR: même si ce post contient toujours des infos utiles, certains des liens qu'il contient sont morts irrevertably. Il est conseillé d'utiliser l'info de cette alternative post.