我在测试我的应用时遇到了问题。您可以在下图中看到我如何设置我的视图:
事情就是一切正常。我使用我的测试用户登录,以下代码执行loginSegue,
self.performSegueWithIdentifier("loginSegue", sender: self)
这是一个模态segue,它将我的登录“View Controller”与“Home Tab Bar View Controller”相关联。我被重定向到“初始Feed视图控制器”。一切都很好。但是当我转到我的“设置视图控制器”,然后单击“注销”按钮,其中包含以下代码(IBAction):
@IBAction func logoutAction(sender: AnyObject) {
PFUser.logOut()
self.performSegueWithIdentifier("logoutSegue", sender: self)
}
我的应用崩溃了。我的Logout按钮的动作有一个segue,它会将你带回登录“View Controller”,但会先将用户记录下来(顺便说一下,我正在使用Parse)。这个“推”segue称为logoutSegue。我试图将segue改为“Popover”segue。这解决了问题,有点,因为这样做会弄乱我的“注册视图控制器”,因为在登录“视图控制器”时,我点击“注册”按钮,应用程序无论如何都会崩溃。
编译器告诉我,以下代码行是导致错误的代码:
self.performSegueWithIdentifier("logoutSegue", sender: self)
我不明白为什么会这样。我想它与我的“导航控制器”和“主页标签栏视图控制器”设置有关。或者也许与代表们合作?
你可以帮我解决这个问题吗?如果您使用Objective-C方法并不重要,请随意提出解决方案,我可以尝试将其从Objective-C转换为Swift。除了帮我解决问题之外,我想知道你是否知道Segue类型(Push,Modal,Popover,Replace)之间的区别是什么,以及我何时应该使用它们。我阅读了Apple的文档,但我仍然完全不理解它。
提前感谢您的建议和回应。
答案 0 :(得分:5)
您不想使用传统的segue返回登录屏幕。普通的segue类型始终会创建目标视图控制器的新副本。相反,您希望将控制权返回给调用您的视图控制器。
您需要在注销时设置展开segue 。这是怎么回事。
1)在ViewController
的代码中添加此功能:
@IBAction func comeHereOnLogout(segue:UIStoryboardSegue) {
println("Yay, Logged Out!")
}
2)从view controller
顶部的Settings View Controller
图标进行控制拖动
exit
顶部的Settings View Controller
图标,然后从显示的弹出框中选择comeHereOnLogout
。
在文档大纲中选择该segue,并在属性检查器中为其指定标识符,例如“logoutSegue”。
然后您可以在代码中使用以下命令触发此segue:
self.performSegueWithIdentifier("logoutSegue", sender: self)
3)或者,您可以将退出按钮中的unwind segue
连接到exit
顶部的Settings View Controller
图标。在这种情况下,此segue将替换您的注销按钮操作。同样,你想给这个segue一个名字,比如“logoutSegue”。
在这种情况下,您需要将注销码放入准备segue:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if segue.identifier == "logoutSegue" {
PFUser.logOut()
}
}