我正在尝试使用以下代码更改ViewDidLoad中的方法:
在课堂宣言中:
var nextValue: Int!
在ViewDidLoad中:
if nextValue == nil {
print("Hi")
} else if nextValue == 2 {
print("Hello")
}
最后这个函数改变了nextValue的值:
func buttonAction(sender: AnyObject) {
self.performSegueWithIdentifier("nextView", sender: self)
nextValue = 2
}
当我从“nextView”向后移动到第一个视图时,nextValue应为2,但它为零。我做错了什么?
答案 0 :(得分:2)
您对视图生命周期的理解是错误的。
首先,在类声明中使用nil值声明变量。 然后,在viewDidLoad方法中检查其值,最后通过一些按钮操作更改其值。
但是,当您通过segue将视图控制器屏幕保留到nextView时,您的firstView将被取消分配,当您再次表示它时,循环将返回到声明级别。因为你将变量值声明为nil,它将始终显示nil值。
如果你想保留它的价值,你需要将它保存在其他地方,NSUserDefault似乎是存储其价值的好选择。
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
nextValue = NSUserDefaults.standardUserDefaults().valueForKey("nextValue") as? Int
if nextValue == nil {
print("Hi")
} else if nextValue == 2 {
print("Hello")
}
}
func buttonAction(sender: AnyObject) {
self.performSegueWithIdentifier("nextView", sender: self)
nextValue = 2
NSUserDefaults.standardUserDefaults().setInteger(2, forKey: "nextValue")
}