iOS: предотвращение сбоя всего приложения в библиотеке - PullRequest
1 голос
/ 26 июля 2011

Я написал библиотеку для iOS, на которую ссылается один файл .h (MyAdaptedViewController.h).

По сути, это представление, которое находится внутри полного UIViewController.

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

То, что я хотел бы, было бы для всего приложения бытьзащищен от сбоев, если происходит сбой в одном UIViewController, т. е. если произошел сбой, пользователь мог продолжать использовать приложение, пока MyAdaptedViewController был отключен.Я понимаю, что это будет зависеть от типа сбоя, но я надеялся, что большинство сбоев / исключений могут быть обнаружены?

Например,

будет @try {} @ catch {} или

void uncaughtExceptionHandler (NSException * исключение)

возможные решения?

1 Ответ

2 голосов
/ 26 июля 2011

НЕТ! Перехват исключений в приложении iOS является исключением из обычных соглашений о кодировании Какао.

NSException для исключительных ошибок, от которых нельзя ожидать восстановления во время выполнения. NSError предназначено для ошибок, от которых вы можете избавиться или, по крайней мере, показать пользователю во время выполнения.

Не пытайтесь обрабатывать каждую ошибку, которая может возникнуть при перехвате исключений. API, предоставляемые Apple, будут только вызывать исключения, если вы допустили программную ошибку. Например, если вы пытаетесь получить доступ к индексу объекта за пределами массива, это является ошибкой программирования, поскольку вы должны правильно получить индекс до доступа к объекту.

Для всех остальных случаев вы должны использовать экземпляры NSError, как это делает Apple.

Если это правильно, обработайте ошибку в вашей библиотеке внутри. Если это невозможно, передайте ошибку вызывающему абоненту и дайте ему справиться с этим.

Я написал более длинную запись в блоге на эту тему здесь: http://blog.jayway.com/2010/10/13/exceptions-and-errors-on-ios/

...