メインの次のコードは、UncaughtExceptions をキャッチする素晴らしい仕事をします。少なくとも 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 ブロックによって処理されます。しかし、iOS 8 ではまったくキャッチされません。
このコードを配置すると:
void onUncaughtException(NSException* exception)
{
[[MyExceptionHandler sharedInstance] handleException:exception];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
NSSetUncaughtExceptionHandler(&onUncaughtException);
}
私の AppDelegate では、期待どおりにすべての例外をキャッチできます。@catch-in-main-approach が iOS 8 で機能しなくなった理由は何なのか (または、おそらく 64 ビット サポートに関連しているのでしょうか) 疑問に思っています。
よろしく、
キリスト教徒