因此,我正在开发一个应用程序,并且如果我没有在应用程序默认值中存储用户名,则从基本视图启动登录视图。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系统本身。
您可以在崩溃时添加堆栈跟踪吗? –