Не намерих документация, която да е в съответствие с моя опит.
Това, което искам, е добър начин за обработка на Uncaught-Exceptions във фонова нишка. Този „начин“ трябва да позволи на приложението да се срине, но да изпълни някои много основни операции, преди да се срине (напр. запазване на стойност в UserDefaults, така че да може да бъде прегледана при следващо стартиране; плюс регистриране).
В основната нишка току-що настроих uncaughtExceptionHanlder и това работи добре. Въпреки това, във фонова нишка - изпълнена като NSOperation на NSOperationQueue - възниква изключение, но не и излизане от приложението: Срив. Приложението продължава да работи в повредено състояние.
Ръководството за програмиране на нишки обаче гласи:
Настройване на манипулатор на изключения Ако вашето приложение улавя и обработва изключения, кодът на вашата нишка трябва да е подготвен да улавя всички изключения, които могат да възникнат. Въпреки че е най-добре да се обработват изключения в точката, където те могат да възникнат, неуспехът да се улови хвърлено изключение в нишка води до излизане на приложението ви. Инсталирането на последен опит/улавяне във вашата рутинна процедура за въвеждане на нишка ви позволява да улавяте всички неизвестни изключения и да предоставяте подходящ отговор.
Един метод, който работи (по-долу), е вграждането на метода за извикване на нишка с try/catch и в случай на изключение, регистриране и след това извикване на abort(). Но това не може да е най-добрият начин да направите това. Бих искал да изпратя изключението към основната нишка и то да бъде обработено от манипулатора на неуловени изключения. Някой правил ли е това?
- (void)threadMethod
{
@try
{
NSArray* aTest = [NSArray array];
[aTest objectAtIndex:10];
}
@catch (NSException* e)
{
// Save to state to User Defaults.
// Log any needed info.
abort();
}
@finally
{
}
}
FYI: Работя с iOS6 с XCode 4.5 SDK.