0

main 中的以下代码在捕获 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 设备上运行相同的代码,任何未捕获的异常都由 main 中的 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 回答