這並不容易,以幫助您沒有更多的說明,張貼代碼或XIB文件。
你說應用程序崩潰沒有任何記錄錯誤 - 嗯,你的意思是控制檯的窗口沒有輸出?對於已崩潰的應用程序,這很正常。
無論如何,你應該能夠獲得堆棧跟蹤來確定應用程序崩潰的位置。打開調試器(⇧⌘Y),並查看位置。這應該讓你知道哪裏出了問題。
在這裏你可以看到這樣的調試程序會話(後EXC_BAD_CRASH)爲例:
前兩行並沒有給我們太多的信息,但後來我們可以看到應用程序崩潰,而從NIB文件加載用戶界面。那麼,通常在這種加載過程中執行的唯一代碼是awakeFromNib
方法 - 您應該根據這些方法找到問題。
通常情況下,代碼的執行沒有任何意義 - 例如,您可能會在某處看到您的ViewController方法,但前幾個函數調用(代碼崩潰的那些)位於您從不調用的方法/類中你的代碼。在大多數情況下,這是內存釋放/分配錯誤的跡象。可能發生的事情是,你忘記了一些你的對象,它已經被釋放,但你仍然保持對其內存的引用(一個指針)。因爲這個記憶實際上已經被釋放了,所以後面的另一個對象就取代了它的位置,通常是一些你從未聽說過的蘋果內部物體。稍後,您的代碼嘗試向您的可憐對象發送消息,但它會向完全不同的消息發送消息。無賴!這就是你如何得到這些崩潰和奇怪的堆棧痕跡。
要解決我剛纔描述的問題,可以使用樂器及其殭屍樂器。不幸的是,你不能從Xcode中啓動殭屍,你需要單獨啓動樂器,然後從工具欄中選擇iPhone Simulator/Memory
,然後Choose Target
下的殭屍,你應該看到你的應用程序,或者能夠在文件系統上導航到它。
殭屍工具的功能在於,它在釋放對象後從未真正釋放內存。相反,它會將這些對象變爲NSZombie類。該類攔截所有對自身的調用,並在某些代碼嘗試向其發送消息時通知您。
這是會議儀器怎麼這麼樣子(這是出現在調試器上面相同的崩潰):
在表中可以看到,我們正在努力有消息的UIScrollView已被釋放。您還可以看到對這個特定對象的保留/釋放調用的整個歷史記錄。這樣你可以找到一個失蹤的保留或錯誤的釋放/ autorelease。
記住 - 殭屍工具只能用於模擬器,因爲在真實設備上沒有足夠的內存來保存所有這些內存塊。
希望我可以幫助您進一步分析您的問題。
你確定「文件所有者」是正確的文件嗎?另外,你在調用什麼代理方法?請張貼一些代碼。 – MishieMoo 2010-09-23 14:26:30