代码之家  ›  专栏  ›  技术社区  ›  John Gallagher

如何暂停应用程序直到提交崩溃报告?

  •  1
  • John Gallagher  · 技术社区  · 15 年前

    背景

    • 我正在我的应用程序中使用UKCrashReporter。

    • 我已经安装了自己的未经检查的 异常处理程序。

    • 我正在设置 对象的ManagedObjectContext ActiveItemController进入 应用程序完成启动(1)

    问题

    如果managedObjectContext方法抛出异常,那么崩溃报告程序对话框只会在应用程序崩溃之前闪烁,因此用户永远无法报告崩溃。

    我只想让我的应用程序继续 之后 已经报告了车祸,而不是在窗口显示的时候。

    我试过什么

    • 如果UKCrashReporterCheckForCrash()。 我想是客观的C方法 我可以打电话 performselectornmainthread:waituntildone:是 但事实并非如此。

    • 我看了另一堆 关于的溢出问题 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时,引发这种想法的bug是一个例外。我的应用程序每隔几毫秒就会在控制台上打印“未捕获异常”。

    当我在这个异常发生之前安装了未捕获的异常处理程序时,我会得到描述的行为——我的应用程序会启动,短暂地显示崩溃报告对话框,然后继续加载并再次崩溃。

    总结-我希望能够处理启动时发生的错误。

    (1)我不使用绑定来完成这项工作,因为我认为绑定会使测试类的问题更加严重。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Joshua Nozzi    15 年前

    我认为你的问题是把它看成是“暂停”你的应用程序。把它更多地看作一个不同的初始用户界面状态。您试图阻止运行循环将阻止任何交互式窗口…嗯,互动。-)

    您最好的选择是仅当“我是否提示用户提交崩溃报告”方法显示“否,继续正常启动”时才显示主UI(以及连接数据源等)。否则,显示您的窗口,当用户发送或拒绝发送报告时,关闭窗口并要求应用程序控制器继续正常启动。

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