![]() |
1
10
更新-2010年11月16日: How can I stop HIToolbox from catching my exceptions?
这扩展到
大卫·盖尔哈的
答案,以及他提供的链接。下面是我如何通过重写NSApplication的
NSApplication+异常处理.m
其次,在NSApplication的委托中,我做了以下操作: AppDelegate.m公司
而不是使用NSApp的
每当抛出异常时 主螺纹 ,并且它不会被捕获和销毁,您的自定义未捕获异常处理程序现在将被调用,而不是NSApplication的。这允许您使应用程序崩溃。 更新:上面的代码中似乎有一个小故障。在NSApplication完成调用其所有委托方法之前,您的自定义异常处理程序不会“启动”并工作。这意味着如果您在 或 应用程序完成启动: 或 唤醒Fromnib: 这意味着如果你这样做:
你的 异常处理程序 不会有例外。NSApplication会,它只会记录它。
现在你的
我对造成这一切的原因有点困惑。可能是API中的一些幕后操作。即使我将NSApplication子类化,而不是添加一个类别,也会发生这种情况。可能还有其他的注意事项。 |
![]() |
2
8
有一个非常简单的解决方案:
是的
如果您使用
我无法想象为什么这不是默认值。 |
![]() |
3
3
也许你可以用 NSSetUncaughtExceptionHandler ,或在NSApplication上创建覆盖 -reportException: http://www.cocoadev.com/index.pl?StackTraces |
![]() |
4
2
我发布了这个问题和答案,希望有人在一年前告诉我: 在主线程上抛出的异常被NSApplication捕获。
http://www.cocoadev.com/index.pl?ExceptionHandling 解决方案。我想是吧。 我有一个几乎完全在主线程上运行的没有UI的守护进程。我将不得不转移整个应用程序来运行后台线程,除非其他人可以建议一种方法来阻止NSApplication捕获我抛出的异常。我很确定那是不可能的。 |
![]() |
5
1
我正试图正确地理解这一点:为什么NSApplication上的category方法会导致无限循环?在该无限循环中,“引发了未捕获的异常”被无限次注销:
为了测试(和理解的目的),这是我唯一要做的事情,即创建上面的category方法(根据中的说明 http://www.cocoadev.com/index.pl?StackTraces 为什么这会导致无限循环?这与默认的未捕获异常处理程序方法应该执行的操作不一致,即只记录异常并退出程序(看到了吗 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Exceptions/Concepts/UncaughtExceptions.html#//apple_ref/doc/uid/20000056-BAJDDGGD ) 会不会是默认的未捕获异常处理程序再次抛出异常,从而导致这个无限循环? 注意:我知道只创建这个category方法很愚蠢。这样做的目的是为了更好地理解。 reportException:方法记录异常 默认的未捕获异常处理程序调用NSApplication的reportException:method(为了记录它,方法的默认实现确实做到了这一点),然后存在于程序中 . 所以呢 现在 应该很清楚为什么在重写的reportException:中调用默认的未捕获异常处理程序会导致无限循环: . |
![]() |
6
1
因此,在应用程序委托方法中似乎没有调用异常处理程序的原因是
所以,我的“修正”是:
有趣的额外说明:
中的默认版本
|