我正在开发一个应用程序,从基本视图开始,如果我在应用程序默认值中没有存储用户名,则会启动登录视图。
let defaults = NSUserDefaults.standardUserDefaults()
if !defaults.objectForKey("username") {
dispatch_async(dispatch_get_main_queue(), {
self.navigationController.tabBarController.performSegueWithIdentifier("Login", sender: self)
})
}
该代码在我的故事板中触发了一个“模态呈现”(iOS 8)的segue,呈现出一个带有默认动画的表单视图。
它创建的视图使用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系统自身中。