2012-05-11 2 views
5

Иногда я получаю исключение изнутри кода объектива-c. в моем примере эти исключения не критичны, и я хочу, чтобы приложение продолжало работать. Вопрос в том, как обращаться с этими исключениями?Обработка исключений ObjC в monotouch

например, мое приложение время от времени падает, пока я использую класс GeoCoder. Мне все равно, не удастся ли геокодеру геокодировать местоположение и хотел бы сохранить мое приложение в живых. в том числе вызовы геокодера в блоках try-catch не решают проблему.

Любая помощь будет оценена!

ответ

6

MonoTouch пытается в определенной степени преобразовать исключения ObjC в управляемые исключения. Это делается путем добавления обработанного обработчика исключений для исключений ObjC, и там создается управляемое исключение. Это работает на вторичных потоках, но не на основном потоке, потому что у iOS есть обработчик try-catch в его основном цикле запуска, который убьет ваше приложение, если какие-либо исключения достигнут его (другими словами, исключение обрабатывается, поэтому оно никогда не будет дошли до необработанного обработчика исключений MonoTouch).

Лучшим способом избежать исключений в ObjC в первую очередь (документация Apple гласит, что исключения ObjC должны использоваться только для действительно исключительных обстоятельств, поскольку у них есть ряд проблем - утечки памяти довольно распространены, например).

Очевидно, что невозможно исключить все исключения ObjC, поэтому мы пытаемся найти обходные пути для тех случаев, где это все еще происходит. Лучший способ сделать это для вашего конкретного случая - создать полный тестовый пример и открыть отчет об ошибке здесь: http://bugzilla.xamarin.com, приложив тестовый пример.

Смежные вопросы