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





cocoa-touch crash (2)


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

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

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

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

我出於示例目的顯示了此問題的代碼,但實際上我的問題是:我應該如何跟踪並理解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錯誤。




正如docs提供的那樣,實際上最好使用Apple的實現。 但是,他們提供的代碼是錯誤的。 將keyboardWasShown:發現的部分替換為下面的註釋:

NSDictionary* info = [aNotification userInfo];
CGRect keyPadFrame=[[UIApplication sharedApplication].keyWindow convertRect:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] fromView:self.view];
CGSize kbSize =keyPadFrame.size;
CGRect activeRect=[self.view convertRect:activeField.frame fromView:activeField.superview];
CGRect aRect = self.view.bounds;
aRect.size.height -= (kbSize.height);

CGPoint origin =  activeRect.origin;
origin.y -= backScrollView.contentOffset.y;
if (!CGRectContainsPoint(aRect, origin)) {
    CGPoint scrollPoint = CGPointMake(0.0,CGRectGetMaxY(activeRect)-(aRect.size.height));
    [backScrollView setContentOffset:scrollPoint animated:YES];
}

Apple代碼的問題是:(1)他們總是計算該點是否在視圖的框架內,但它是一個ScrollView ,因此它可能已經滾動並且需要考慮該偏移量:

origin.y -= scrollView.contentOffset.y

(2)他們將contentOffset移動了鍵盤的高度,但我們需要相反的方向(我們希望將contentOffset移動到屏幕上可見的高度,而不是那個)。

activeField.frame.origin.y-(aRect.size.height)




objective-c cocoa-touch crash sigabrt