objective-c - 如何追踪SIGABRT的原因




cocoa-touch crash (2)

我出於示例目的顯示了此問題的代碼,但實際上我的問題是:我應該如何跟踪並理解SIGABRT錯誤? 我讀到了這個問題: 沒有錯誤信息的sigabrt ,但我不認為這與我的問題有關。

下面我將展示的示例顯然不是xib問題,之前獲得SIGABRT似乎更多地與未處理的異常有關。 我嘗試過使用GDB的bt但這沒有用。 是否沒有更全面的轉儲可供查看? 我也使用過NSZombie ,但我真的不明白如何使用它,所以如果這是你的答案,請提供一個文檔鏈接,說明我應該從中獲取相關數據。

這是我的例子:我正在嘗試使用Core Data。 我的項目最初並沒有設置它,所以我不得不手動添加它,我通過轉到我的項目> Build Phases> Link Binary with Libraries>點擊加號並添加CoreData.framework

然後我通過轉到文件>新建>數據模型創建了我的數據模型。 我創建了很多屬性,就是這樣

之後,我向app delegate添加了正確的方法(我通過使用Core Data創建一個新項目,然後復制方法來完成此操作):

//code removed, as its not needed for the question/answer

在此之後,我只是嘗試將值保存到託管對象(再一次,使用新項目從默認實現複製代碼):

//code removed, as its not needed for the question/answer

但是,當我執行addTime方法時,我得到的addTime SIGABRT錯誤。


Answers

當對象收到未實現的消息時,SIGABRT會上升。 您的應用有多少警告? 嘗試瀏覽它們並找到警告你的“某些對象可能無法響應某些選擇器”,如果你從所有這些中清除你的應用程序,你很可能會讓它正常工作。

編輯:下面的評論回答非常有用:

好吧,這裡是重型火砲 - 你嘗試過使用斷點嗎? 打開項目資源管理器中的第六個選項卡,在左下角點擊+ - >添加例外斷點 - >完成。 這將添加一個異常處理程序,它將在應用程序崩潰的方法調用上停止您的應用程序。

編輯:從xCode 5.0開始>您不再需要指定斷點在創建斷點時要捕獲的異常。 你只需要點擊+ - >添加異常斷點就可以了。


對我而言,以下工作正常:

tableView.allowsSelection = NO;

這意味著didSelectRowAt#根本行不通。 也就是說,觸摸表格中的一行,就不會做任何事情。 (因此,顯然,永遠不會有選擇動畫。)

(請注意,如果在單元格中有UIButton或任何其他控件,那麼當然這些控件仍然可以工作。在表格單元格中碰巧有的任何控件與UITableView允許您“選擇一行“使用didSelectRowAt# 。)





objective-c cocoa-touch crash sigabrt