“当应用程序崩溃时你在做什么?”复苏

时间:2011-08-17 19:09:35

标签: iphone objective-c xcode

已更新!检查照片后。

所有

我今天正在玩iPhone应用程序(Photovine)并注意到我希望在我的应用程序中包含的功能。当应用程序崩溃时,我正在向应用程序添加照片。我想没什么大不了的,我只是重新打开它。当我重新打开它时,BAM,UIAlertView弹出一个小文本框,询问我“当应用程序崩溃时你在做什么?”

我认为这是一个非常棒的功能,但在我发布问题之前的10秒搜索中,我找不到如何实现它。

有谁知道怎么做?

enter image description here

**编辑:对于尝试此操作的任何人,请记住同步您的NSUserDefaults以使其正常运行。如果在将其写入YES后进行同步,则NSUserDefaults方法可以正常工作。只需致电[NSUserDefaults synchronize];,你就会变得金黄。

4 个答案:

答案 0 :(得分:2)

没有代码 - 但主要想法是:

  1. 当应用程序启动时,您保存了一些属性,让“压缩”为“是”。
  2. 正常关闭应用程序时,将其设置为NO。
  3. 现在,当您启动应用程序时,检查此属性是设置为YES还是NO以指示崩溃。

答案 1 :(得分:2)

您可以为导致程序终止的条件(未捕获的异常和信号)安装处理程序,并设置您在启动时检查的标志。有关捕获异常和信号的详细信息,请参阅此Cocoa with Love post

此代码将为未捕获的异常和信号安装处理程序,导致程序关闭。

void InstallUncaughtExceptionHandler() {
    NSSetUncaughtExceptionHandler(&HandleException);
    signal(SIGABRT, SignalHandler);
    signal(SIGILL, SignalHandler);
    signal(SIGSEGV, SignalHandler);
    signal(SIGFPE, SignalHandler);
    signal(SIGBUS, SignalHandler);
    signal(SIGPIPE, SignalHandler);
}

SignalHandlerHandleException函数应该:

  1. 使用NSUserDefaults设置标记以指示崩溃,并存储任何其他可能有用的信息(例如时间,以便您可以判断哪些数据与哪次崩溃有关)。
  2. 删除信号或异常处理程序,以便步骤3导致崩溃。
  3. 重新发送信号或异常。这将导致实际崩溃,从而创建崩溃日志。
  4. didFinishLunchingWithOptions:方法中,您应该检查此标志。如果找到它,则显示窗口以从用户收集信息并将其发送给自己。然后清除旗帜。

答案 2 :(得分:1)

我猜应用程序会在应用程序正常终止时设置一个标志。如果应用程序加载并且未设置标志,则抛出对话框。

查看app delegate方法:

- (void)applicationWillTerminate:(UIApplication *)application

答案 3 :(得分:1)

您可以做的一件事是使用NSUserDefaults记录应用程序启动或移动到前台的时间,然后当应用程序终止或移动到后台时,您可以记录退出时间(因为在Apple可以随时终止您的申请,恕不另行通知。每次发布时,请确保应用程序关闭时间>比应用程序启动时间,否则可能是崩溃。