簡體   English   中英

如何找出導致iOS應用崩潰的原因

[英]How to isolate the cause of strange iOS app crash

我正在處理的應用程序發生崩潰,因為我很難找到原因。 這是導致崩潰的唯一一組事件:

該應用程序打開,並顯示主視圖控制器(VCmain)。 觸發一個按鈕,該按鈕通過segue打開一個模態視圖控制器(VCmodalA)。 VCmodalA僅顯示一些有關核心數據對象的信息。 VCmodalA然后通過按下按鈕來消除。 在將來的某個時刻,將以模態形式呈現另一個視圖控制器(VCmodalB),該控制器具有一些用於創建新核心數據對象的字段。 創建對象后,如果關閉了VCmodalB,應用程序將崩潰並顯示以下錯誤:

*** -[UILabel _supportsContentDimensionVariables]: message sent to deallocated instance 0x818e200

如果在VCmodalB之前未顯示VCmodalA,或者未創建新的核心數據對象,或者未關閉VCmodalB,則不會發生崩潰。 我不知所措'_supportsContentDimensionVariables'的意思或發給誰,盡管它似乎發送給了VCmodalB上的標簽(因此,必須引起崩潰,因為調用該標簽時是因為視圖控制器被解雇)。

我花了數小時在Instruments上四處尋找,看看留下的僵屍,並試圖通過注釋掉有問題的代碼來進行隔離,但是我一直沒有成功。 此時,任何提示都將受到歡迎!!

非常感謝!

導致此類錯誤的主要原因有兩個:無法使用ARC和直接訪問ivars(尤其是如果您未使用ARC)。 解決這兩個問題是避免此類崩潰的最佳方法。

至於調試方法,首先,您要審核對UILabel對象的訪問。 如果您有任何指向UILabel ivars,則它們應為strongweak ,切勿assign

您應該確保視圖控制器不在屏幕上時不運行代碼。 這次崩潰使我認為這是一個可能的問題。 例如,請勿在viewDidLoadinitWithFrame:設置計時器。 viewDidAppear:設置它們,然后在viewWillDisappear:中將它們拆除。 對於KVO或委派,也是如此。 視圖控制器管理視圖; 如果他們不在屏幕上時正在做某事,則您的設計不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM