2010-06-24 109 views
0

我在模擬器3.1.3上測試我的應用程序,它運行正常。 當它來到模擬器3.2,它從一開始就崩潰了:在模擬器3.2上運行時出現異常3.2

2010-06-24 16:35:29.208 MyTestApp[6991:207] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:' 
2010-06-24 16:35:29.213 MyTestApp[6991:207] Stack: (
46195275, 
2520474889, 
46194715, 
46194554, 
6387912, 
6392266, 
5568184, 
6388086, 
6386450, 
6392266, 
5564974, 
5573454, 
3555255, 
3560368, 
3586056, 
3567777, 
3599431, 
52998524, 
45735996, 
45731912, 
3559044, 
3591649, 
10824, 
10678 

據我所知,我沒有用「的initWithCoder」方法(真的不知道這是什麼雖然)。

如何知道引發異常的位置,以便我可以更好地瞭解引起問題的原因?我已經在Breakpoint中添加了一個異常:objc_exception_throw(位置libobjc.A.dylib,奇怪的是我不得不手動輸入位置,我希望xcode在添加objc_exception_throw時爲我找到它)。但仍然是一樣的痕跡,沒有更多的信息。

+0

'initWithCoder'通常在加載XIB文件時被調用。你可能想先查看那裏 – iwasrobbed 2010-06-24 19:06:33

+0

你好,由於這個錯誤(並且因爲我的應用可能不那麼幹淨),我決定從頭開始重建它。它開始正常工作,直到我在一個nib文件中改變某些東西(事情是我不知道但是肯定不是一件大事),並且我開始再次出現這個錯誤。正如你所說,聽起來這是鏈接到筆尖文件,但我根本不知道可能是什麼原因。 – Luc 2010-06-25 14:13:46

+0

你好,我終於找到了這個問題的原因。你是對的,這是連接到筆尖文件。在主要的nib文件中,我添加了一個NSDictionary類型的對象的實例,這是一個我用作應用程序委託的屬性的對象。相反,我已經在委託中初始化了這個對象,現在工作好多了。非常感謝。 Luc – Luc 2010-06-25 20:45:18

回答

1

我想出了這個錯誤的原因。我在IB中創建了一個類型爲NSDictionnary的對象,它似乎不是這樣做的正確方法。相反,我有編程方式在XCode中創建這個相同的對象,這工作正常。似乎是一種持續存在的問題。

1

本頁面提供一些有用的信息:Debugging Tips for Objective-C

特別令人感興趣的是控制檯命令info line *。每個由異常日誌列出的號碼都是堆棧中的地址。例如,那些在10,000和以下範圍內的底部通常位於應用程序的主要方法中。最高範圍的地址往往代表默認庫。

使用命令info line *10678可能會返回有關主方法中特定行的某些信息,這並沒有多大幫助。通常的訣竅是在默認庫開始之前找到最高地址。我不確定這會對您的問題有多大幫助,尤其是在預計的小地址與下一個最高地址之間存在巨大差距時。在任何情況下,從底部兩個最上面的地址開始(我在發佈的日誌中可以看到的3555255),然後查看它是否從您自己的代碼文件中返回一行。如果有,請檢查它上面的一個,等等,直到找到自己代碼中的最後一個地址。希望這可以幫助。

+0

非常感謝,這明確有助於更好地理解調試工具。我會檢查這個。 Regards, Luc – Luc 2010-06-25 12:17:32