Следующий код отлично справляется с перехватом исключений UncaughtException — по крайней мере, до iOS 8.
int main(int argc, char * argv[])
{
@try {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}
@catch (NSException *exception) {
[[MyExceptionHandler sharedInstance] handleException:exception];
}
}
Запустив тот же код на устройстве iOS 7, любые неперехваченные исключения обрабатываются блоком catch в main. Однако в iOS 8 он вообще не ловится.
Если я размещу этот код:
void onUncaughtException(NSException* exception)
{
[[MyExceptionHandler sharedInstance] handleException:exception];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
NSSetUncaughtExceptionHandler(&onUncaughtException);
}
в моем AppDelegate я могу поймать все исключения, как и ожидалось. Мне просто интересно, по какой причине подход @catch-in-main перестал работать в iOS 8 (или, возможно, это связано с 64-битной поддержкой)?
С уважением,
христианин