Comment suis-je tombé dans un bloc @ try / @ catch?

J'ai reçu le rapport d'erreur suivant (tronqué)

Exception Type: EXC_CRASH (SIGSEGV) Exception Codes: 0x00000000, 0x00000000 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libsystem_kernel.dylib 0x36df00d8 __psynch_mutexwait + 24 1 libsystem_c.dylib 0x31760674 pthread_mutex_lock + 376 2 CoreFoundation 0x31f2338a CFRunLoopWakeUp + 50 3 WebCore 0x308d0bc8 _WebThreadRun + 284 4 UIKit 0x37921c7a -[UIWebDocumentView _runLoadBlock:] + 38 5 UIKit 0x37921c3a -[UIWebDocumentView _cleanUpFrameStateAndLoad:] + 114 6 UIKit 0x37921bbe -[UIWebDocumentView loadHTMLSsortingng:baseURL:] + 78 

Le problème est que le code appelant ressemble à ceci:

 @try { [webView loadHTMLSsortingng:htmlSsortingng baseURL:nil]; [webView setNeedsDisplay]; } @catch (NSException *exception) {...} 

Alors, comment ai-je réussi à lancer une exception depuis un gestionnaire d'exceptions?

Je n'ai pas appelé la méthode de lancer de l'intérieur des sockets. Tout ce que je suis en train de faire, c'est de faire glisser vers NSLog l'exception, le webView et le htmlSsortingng. Si elles causaient l'exception, je m'attendrais à ce que la stack de crash soit différente.

Est-ce que cela semble réduire à un bug potentiel du operating system?

C'est une faute de segmentation (SIGSEGV) , pas une exception.

Ces fautes ne sont pas des exceptions, ce qui signifie que vous ne pouvez pas utiliser un bloc try / catch.

Une erreur de segmentation signifie que vous essayez d'accéder à une région de memory qui n'appartient pas à votre application.

Dans votre cas, cela peut être dû à des objects libérés automatiquement qui sont désalloués, puis accédés (le pointeur n'est plus valide, puisque l'object a été désalloué).

Assurez-vous que votre variable htmlSsortingng pointe toujours vers un object valide …

En passant, je ne pense pas que l'appel de setNeedsDisplay soit nécessaire après l'utilisation de loadHTMLSsortingng .