0

メインの次のコードは、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 ビット サポートに関連しているのでしょうか) 疑問に思っています。

よろしく、

キリスト教徒

4

1 に答える 1

0

この投稿によると:

iOS 64 ビット @try {...} @catch {...} が機能しない

64ビット関連のようです。@bbum からのコメントを参照してください

于 2015-06-12T10:57:50.487 に答える