【发布时间】:2014-07-16 21:47:10
【问题描述】:
所以我正在开发一个应用程序,如果我没有存储在应用程序默认值中的用户名,我会从基本视图启动登录视图。
let defaults = NSUserDefaults.standardUserDefaults()
if !defaults.objectForKey("username") {
dispatch_async(dispatch_get_main_queue(), {
self.navigationController.tabBarController.performSegueWithIdentifier("Login", sender: self)
})
}
代码在我的故事板中触发“Present Modally”(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 系统本身中。
【问题讨论】:
-
能否在崩溃时添加堆栈跟踪?
标签: ios swift autolayout ios8