发现有限的解决方法。我使用shared memory block,其名称是从包ID派生的名称,用于存储上下文字符串。该块在正确关闭时清除。然后我重写我的Quincy代理中的-crashReportDescription
,以便它提供共享内存(如果有的话)作为描述。如果最后一次应用程序关机是崩溃,它只是非空的。
这种方法存在明显的缺陷。如果他们说,在崩溃和下一次应用程序启动之间重新启动设备,则共享内存信息将丢失。
编辑:在设计的第一个版本中,我使用了一个私有的名为UIPasteboard而不是共享内存。结果是相当的表现。共享内存快了几个数量级。编辑2:但他们打破了iOS 7中的共享内存,所以UIPasteboard又回来了。游民。
EDIT3:找到了另一种方法,不太优雅,但它在iOS 7中工作。我将我的上下文字符串存储在普通的静态内存块中。我在PLCrashReporter中放置了一个自定义的碰撞处理程序,其中包含[[PLCrashReporter sharedReporter] setCrashCallbacks:]
。在处理程序中,我将所述上下文(如果有)写入文件。在应用程序启动时,我读取了所述文件,并提供了-crashReportDescription
中的内容(如果有)。走开,UIPasteboard。