2

我開發了我的應用程序,使用我的3G設備進行測試。在給朋友測試時,他發現它崩潰了。我查看了崩潰日誌,但除了幾條內存警告之後的「EXC_BAD_ACCESS」語句外,沒什麼用處。幫助調試iPhone應用程序 - EXC_BAD_ACCESS

在我的設備上,我可以使用imagePicker批次,並且每次拍攝照片時都會收到內存警告,但這不會導致任何問題。

在我的朋友的設備(也是3G)上,從相機中選擇了幾張圖像後,該應用程序崩潰。

所以,我的問題是..我認爲東西被釋放,因爲內存警告 - 但只有我的朋友的設備上,然後釋放之後,它試圖再次使用。我怎樣才能找出被調用的對象?我無法使用NSZombies,因爲這是一個遠程(測試版)設備。

請幫忙!

此外,如果任何人有任何想法,爲什麼我的設備可以像挑選後的圖像,沒有任何問題,他不能...這將是最有幫助的

謝謝!

編輯:新的發現..我也收到這個錯誤信息:KERN_PROTECTION_FAILURE,我知道是與數據訪問有關。我保存從UIImagePicker獲得的圖像後,崩潰似乎發生。有任何想法嗎?

+1

可能是圖像選取器的代表。你有可能發佈了它嗎?您的朋友仍然可以發送崩潰日誌。搜索谷歌如何讓他們與iTunes和如何符號。 – 2010-01-08 00:28:49

+0

我不認爲我已經發布了它。我只是關閉了didFinishPickingMediaWithInfo委託方法中的選擇器。雖然也許我應該在使用拾取器之前使用返回的「信息」?目前,我先解僱了選擇器,然後利用返回的圖像 – 2010-01-08 00:55:27

回答

3

您可能會過度釋放某些東西。如果您正在運行Snow Leopard,請運行靜態分析器(Cmd-Shift-A)並查找內存錯誤。

事實上,它在內存錯誤後崩潰表明UIViewController已經發布了它的視圖。你有任何UIViewControllers觀察NSNotifications,否則可能會改變他們的IBOutlets,而他們是在屏幕外?這是這種崩潰的常見原因。確保你是correctly memory managing your IBOutlets。 UIViewControllers在屏幕外不應該混淆他們的IBOutlets(或者他們的UI組件)。即使你不犯這個錯誤,如果你沒有執行上述鏈接中提到的事情,你仍然可以在內存警告後崩潰。

MemoryWarning是一個非常不錯的主意,事情已經有所改善,但蘋果仍然沒有完全熟悉UIViewController的使用方式。開發者仍然需要非常小心。

+0

嗨。我嘗試了靜態分析器,沒有出現錯誤。實際上,除了窗口底部的「成功」消息之外,什麼都沒有發生。很奇怪。 – 2010-01-07 23:31:29

+0

並不奇怪。只是意味着你沒有明顯的錯誤。對IBOutlets的管理不當將不會被叮噹抓住,也不會通知發佈的對象。 – 2010-01-08 00:26:59

+0

從我的日誌文件中,我可以看到以下內容。這是否意味着問題發生在[PictureView clearPage]? 異常類型:EXC_BAD_ACCESS(SIGBUS) 異常代碼:KERN_PROTECTION_FAILURE在0x0000000f 崩潰螺紋:0 線程0毀損: 0 libobjc.A.dylib \t 0x00003ebc objc_msgSend + 20 1 MyApp的\t 0x0000378a - [PictureView clearPage](PictureView .m:79) – 2010-01-08 20:46:34

0

你應該讓你的朋友來到你的電腦並用NSZombieEnabled運行它。這是調試這些問題的最佳方法。

+0

是的,這就是我想要做的,但這是不可能的。有沒有辦法記錄這樣的事情? – 2010-01-07 23:02:05