2008-09-15 37 views

回答

5

我見過多次在那裏,當你試圖訪問一個對象,你沒有保留適當所以它要麼不指向你的對象或其指向的有效副本會發生這種情況另一種類型的對象早期放置斷點並分析對象的步驟通過啓動使用po和打印在gdb中是最好的選擇

-3

這是一個可能的原因。有一個IBOutlet對象沒有被初始化,並且在nil上調用了一條消息。堆棧跟蹤可能是這樣的:

#0 0x90a594c7 in objc_msgSend 
#1 0xbffff7b8 in ?? 
#2 0x932899d8 in loadNib 
#3 0x932893d9 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] 
#4 0x9328903a in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] 
#5 0x93288f7c in +[NSBundle(NSNibLoading) loadNibNamed:owner:] 
#6 0x93288cc3 in NSApplicationMain 
#7 0x00009f80 in main at main.mm:17 

由於堆棧跟蹤是沒有幫助的,你將不得不步代碼中查找錯誤。如果由於某種原因,您無法在執行早期設置斷點,請嘗試插入一些Debugger();調用將打破調試器。

+0

消息到零在Objective-C中不是錯誤。 – mmalc 2008-10-16 15:14:35

0

補充:最重要的原因解除封存失敗是忘記「迴歸自我」;來自自定義類的-init。它傷害了很多:(

0

檢查控制檯日誌(Applications/Utilities/Console.app)當程序崩潰時啓動,並有一些錯誤的初始化,就經常寫一些有用的錯誤信息出現,它崩潰之前。

2

這通常表示內存管理錯誤。

確保所有出口報關單遵循最佳實踐:

@interface MyClass : MySuperclass { 
    UIClass *myOutlet; 
} 
@property (nonatomic, retain) IBOutlet UIClass *myOutlet; 
@end 

這種格式可以確保您有任何超在任何平臺上獲得的內存管理權。

檢查任何awakeFromNib方法,以確保您不要過度釋放對象等

1

一個新的答案,一個古老的線程... XCode中4診斷EXC_BAD_ACCESS例外的最有效的方法是使用儀器分析您的應用程序(從XCode單擊產品/配置文件並選擇殭屍)。這將幫助您識別發送到釋放對象的消息。

相關問題