2014-07-16 195 views
3

因此,我正在開發一個應用程序,並且如果我沒有在應用程序默認值中存儲用戶名,則從基本視圖啓動登錄視圖。dismissViewControllerAnimated:completion:導致內存崩潰

let defaults = NSUserDefaults.standardUserDefaults() 
if !defaults.objectForKey("username") { 
    dispatch_async(dispatch_get_main_queue(), { 
     self.navigationController.tabBarController.performSegueWithIdentifier("Login", sender: self) 
    }) 
} 

代碼觸發一個「當前的模態」(的iOS 8)賽格瑞在我的故事板呈現與默認的動畫形式表。

它創建的視圖具有使用AutoLayout排列的各種子視圖。

現在,稍後在我的代碼中(在檢查登錄有效並更新默認值時),我忽略登錄視圖。

defaults.setObject(signInData["username"], forKey: "username") 
defaults.setObject(signInData["password"], forKey: "password") 
defaults.synchronize() 
dispatch_async(dispatch_get_main_queue(), { 
    self.dismissViewControllerAnimated(true, completion: nil) 
}) 

在這裏我得到了應用程序崩潰。具體來說,錯誤消息(當殭屍對象啓用時)是

-[_UILayoutGuide superview]: message sent to deallocated instance 0x7fb3cc93bdb0 

其中UILayoutGuide顯然是AutoLayout相關的。

現在看來,我的觀點被解散後被釋放,但有一個指針,儘管如此,它仍然保留。我不知道如何解決它,因爲它不是在我寫的任何代碼中(我認爲),而是在AutoLayout系統本身。

+1

您可以在崩潰時添加堆棧跟蹤嗎? –

回答

0

_UILayoutGuide是對象的類,0x7fb3cc93bdb0是對象的舊RAM位置(現在是殭屍對象的位置)。「superview」是發送給殭屍的消息。

由於您在發佈Beta-2之前發佈了一個更新,因此解決了您的問題嗎?

-1

我遇到了這個問題,我的應用程序崩潰了,因爲一些視圖的約束在彈出(或關閉)視圖控制器後仍然有效,以下是錯誤代碼。調試一段時間後,我發現視圖約束被擁抱到底視圖或頂視圖佈局,這是崩潰的主要原因,所以我已經將該約束(從佈局視圖更改爲父視圖)更改爲父視圖查看快照。 enter image description here

由於未捕獲的異常'NSGenericException'而終止應用,原因:'無法在視圖上安裝約束。約束是否從視圖的子樹之外引用了某些東西?這是違法的。約束:查看:>'