2012-12-18 21 views
5

我有異步事件大項目,有時我有錯誤 [__NSArrayM insertObject:atIndex:]:對象不能是零, 但我還沒有知道從哪裏拋出這個錯誤。我怎麼能趕上這個錯誤?我讓斷言在隨處可見,我使操作insertobject:atIndex而已..[__NSArrayM insertObject:atIndex:]:對象不能爲零 - 如何確定錯誤在哪裏?

這是堆棧:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 


*** First throw call stack: 

(0x34c352a3 0x32f4597f 0x34b7f8d9 0xc48db 0xc3ced 0xc3b41 0x1178d9 0x148aed 0x103cfd 0x102fc9 0x101f95 0x35f25595 0x35f7a13b 0x35f7a081 0x35f79f65 0x35f79e89 0x35f795c9 0x35f794b1 0x35f67b93 0x35f67833 0xd820b 0x35fc8275 0x3604aea9 0x326efa6f 0x34c0a5df 0x34c0a291 0x34c08f01 0x34b7bebd 0x34b7bd49 0x350b82eb 0x35f5a301 0x62e45 0x62de0) 

libc++abi.dylib: terminate called throwing an exception 
+0

發生異常時獲取回溯,這將是有幫助的。 – borrrden

回答

46

的一個好方法以檢查你的代碼崩潰是:

1)轉到Xcode中斷點選項卡。

2)點擊在底部的「+」按鈕

3)添加例外斷點

a)在斷裂選項卡中選擇兩個:

i) on Throw 

    ii) on Catch 

和建立和r 聯合

4)這些斷點會給你準確的位置,你的應用程序正在崩潰90%的時間

希望這可以幫助你。 :)

+0

此解決方案幫助我!謝謝 ! –

+0

歡迎:) – Divya

+0

忘記了這些,偶然發現了這個答案,謝謝幫助了很多 – StuartM

-8

顯然,你插入的對象不應該是零。覈實!

+1

OP想知道一種技術來定位*發生這種情況,而不是*爲什麼* – borrrden

+0

這不是一個有效的答案,將有助於解決此問題 –

3

有時候,如果你找不到它的拋出異常。只需在您的項目中添加這些symbolic breakpoints即可。然後運行

 
objc_exception_throw 
malloc_error_break 
[NSException raise] 

在你Xcode轉到Product -> Debug -> Create Symbolic Breakpoint。輸入上述Symbol中的每個斷點,然後按Done或者您可以通過轉到Breakpoint navigator (cmd + 6)在左下角創建+符號,然後單擊+然後Add symbolic breakpoint。現在嘗試運行,它會讓你到達崩潰的特定行。

+0

這有助於追蹤常規異常斷點不會發生的異常。 –

0

認爲你需要處理來自Array的null值。 它的工作對我來說 類似:

if (array ! = nil) { 
    NSLog(@"name is nil"); 
} else { 
    // addobject to array 
} 
相關問題