2012-05-11 14 views
5

A volte ricevo un'eccezione dall'interno del codice obiettivo-c. nel mio esempio queste eccezioni non sono critiche e voglio che l'app continui a funzionare. La domanda è: come gestisco queste eccezioni?gestione eccezioni ObjC in monotouch

ad esempio, la mia app si blocca di tanto in tanto mentre utilizzo la classe GeoCoder. Non mi interessa davvero se geocoder non è riuscito a geocodificare la posizione e vorrebbe mantenere viva la mia app. incluse le chiamate geocoder nei blocchi try-catch non risolvono il problema.

Qualsiasi aiuto sarà apprezzato!

risposta

6

MonoTouch tenta in una certa misura di convertire le eccezioni ObjC in eccezioni gestite. Questo viene fatto aggiungendo un gestore di eccezioni non gestito per le eccezioni ObjC, e lì genera un'eccezione gestita. Funziona su thread secondari, ma non sul thread principale, perché iOS ha un gestore try-catch nel suo ciclo di esecuzione principale, che uccide la tua app se le eccezioni lo raggiungono (in altre parole l'eccezione viene gestita, quindi non lo farà mai raggiungere l'handler di eccezioni non gestite di MonoTouch).

Il modo migliore è quello di evitare le eccezioni objc in primo luogo (la documentazione di Apple afferma che le eccezioni objc dovrebbero essere utilizzati solo per circostanze veramente eccezionali, dal momento che hanno una serie di problemi - perdite di memoria è abbastanza comune, per esempio).

Ovviamente non è possibile evitare tutte le eccezioni ObjC, quindi cerchiamo di trovare soluzioni alternative per quei casi in cui si verifica ancora. Il modo migliore per ottenere questo risultato per il tuo caso specifico è creare un caso di test completo e aprire una segnalazione di bug qui: http://bugzilla.xamarin.com, allegando il test case.