發現有限的解決方法。我使用shared memory block,其名稱是從包ID派生的名稱,用於存儲上下文字符串。該塊在正確關閉時清除。然後我重寫我的Quincy代理中的-crashReportDescription
,以便它提供共享內存(如果有的話)作爲描述。如果最後一次應用程序關機是崩潰,它只是非空的。
這種方法存在明顯的缺陷。如果他們說,在崩潰和下一次應用程序啓動之間重新啓動設備,則共享內存信息將丟失。
編輯:在設計的第一個版本中,我使用了一個私有的名爲UIPasteboard而不是共享內存。結果是相當的表現。共享內存快了幾個數量級。編輯2:但他們打破了iOS 7中的共享內存,所以UIPasteboard又回來了。遊民。
EDIT3:找到了另一種方法,不太優雅,但它在iOS 7中工作。我將我的上下文字符串存儲在普通的靜態內存塊中。我在PLCrashReporter中放置了一個自定義的碰撞處理程序,其中包含[[PLCrashReporter sharedReporter] setCrashCallbacks:]
。在處理程序中,我將所述上下文(如果有)寫入文件。在應用程序啓動時,我讀取了所述文件,並提供了-crashReportDescription
中的內容(如果有)。走開,UIPasteboard。