背景
我在我的应用中使用UKCrashReporter。
我已经安装了自己的Uncaught 例外处理程序。
我正在设置 该对象的managedObjectContext activeItemController in applicationDidFinishLaunching(1)
问题
如果managedObjectContext方法抛出异常,则崩溃报告器对话框仅在应用程序崩溃之前闪烁,因此用户永远不会报告崩溃。
我希望我的应用仅在>>报告崩溃后继续,而不是在窗口显示时。
我尝试了什么
如果UKCrashReporterCheckForCrash() 我认为是一种客观的C方法 我可以打电话 performSelectorOnMainThread:waitUntilDone:YES 但事实并非如此。
我看过其他一些Stack 有关using Conditional Locks暂停应用的溢出问题, 但我无法理解我是如何使用它的 对于C函数。
我怎样才能以一种好的方式做到这一点?人们有什么建议 为了我?任何回应都会很多 赞赏。
守则
// In app delegate
-(void)applicationWillFinishLaunching:(NSNotification *)aNotification {
UKCrashReporterCheckForCrash(); // A C function which then creates a window if
// it detects a crash has happened.
}
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[activeItemController setMoContextDisk:[self managedObjectContext]];
[activeItemController setMoContextMemory:[self managedObjectContextMemory]];
}
更新1
我被问到有关我正在尝试做什么的更多细节,所以现在就这样了。
在合并managedObjectModels时,触发此思考的错误是一个例外。我的应用程序陷入了一个循环,每隔几毫秒就会将“Uncaught exception”打印到控制台。
当我在发生此异常之前安装未捕获的异常处理程序时,我会得到描述的行为 - 我的应用程序将启动,短暂显示崩溃报告对话框,然后继续加载并再次崩溃。
摘要 - 我希望能够处理启动时发生的错误。
(1)我没有使用绑定来执行此操作,因为我认为绑定会使测试类更有问题。
答案 0 :(得分:1)
我认为您的问题在于将其视为“暂停”您的应用。将其视为不同的初始UI状态。您阻止运行循环的尝试将阻止任何交互式窗口......好吧,是交互式的。 : - )
最好的办法是,只有当“我提示用户提交崩溃报告”方法说“不,继续并正常启动”时,才能显示主UI(并连接数据源等)。否则,显示您的窗口,当用户发送或拒绝发送报告时,关闭窗口并让您的应用控制器继续正常启动。
我查看了UKCrashReporterCheckForCrash(),它似乎没有创建任何类型的窗口。它只是提交了崩溃。你能用更多的细节描述一下你在做什么吗?