如何在提交崩溃报告之前暂停我的应用程序?

时间:2009-12-02 13:09:14

标签: objective-c cocoa crash timer crash-reports

背景

  • 我在我的应用中使用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)我没有使用绑定来执行此操作,因为我认为绑定会使测试类更有问题。

1 个答案:

答案 0 :(得分:1)

我认为您的问题在于将其视为“暂停”您的应用。将其视为不同的初始UI状态。您阻止运行循环的尝试将阻止任何交互式窗口......好吧,是交互式的。 : - )

最好的办法是,只有当“我提示用户提交崩溃报告”方法说“不,继续并正常启动”时,才能显示主UI(并连接数据源等)。否则,显示您的窗口,当用户发送或拒绝发送报告时,关闭窗口并让您的应用控制器继续正常启动。

我查看了UKCrashReporterCheckForCrash(),它似乎没有创建任何类型的窗口。它只是提交了崩溃。你能用更多的细节描述一下你在做什么吗?