简短版本: 如何在离开视图时“快照”我的游戏状态,并在返回视图时将其恢复到准确状态?或者只是保持值而不管我当前的视图?
长版: 我有一个带有自己的视图控制器的“设置”视图和一个带有自己的视图控制器的“游戏”视图。我希望能够切换回设置以更改游戏,而不会在我回去时重新初始化我在游戏视图中的所有IBOutlet及其值。
我理解这是变量被声明的地方,因此在调用时必须重新初始化,但我甚至尝试使用全局变量在声明中定义它们,我可以在“viewDidDisappear”上更新但是值/属性似乎没有填充。我认为必须有一种方法可以将这些值(或游戏当前状态)保留在内存中,而不会在视图消失时解除分配。
我添加了一些示例代码,其中可以复制问题,但我不认为这对代码有如此多的问题,因为我对其功能和/或功能的理解有限。
提前感谢任何可以提供解决方案的帮助!
我的游戏片有一个自定义类:
class gamePiece: UILabel {
var face = "face"
func updateFace() {
self.text = self.face
}
}
var isGameOver = true
var allLabels = [gamePiece]()
我的gameViewController看起来像这样:
class gameViewController: UIViewController {
@IBOutlet var l1: gamePiece!
@IBOutlet var l2: gamePiece!
@IBOutlet var l3: gamePiece!
@IBOutlet var l4: gamePiece!
@IBAction func buttonPressed() {
l1.face = "hello world"
l1.updateFace()
}
override func viewDidLoad() {
super.viewDidLoad()
if isGameOver {
allLabels = [l1, l2, l3, l4]
isGameOver = false
} else {
l1.text = allLabels[0].text!
l2.text = allLabels[1].text!
l3.text = allLabels[2].text!
l4.text = allLabels[3].text!
allLabels = [l1, l2, l3, l4]
}
for label in allLabels {
label.updateFace()
}
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidDisappear(animated: Bool) {
allLabels = [l1, l2, l3, l4]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
期望是l1.text
会呈现“你好世界”。相反,它呈现“面子”;我的gamePiece
类的对象的默认值。
我确信这是一个简单的解决办法......我只是认为它离我的脸很近,我看不到它。