【发布时间】:2015-10-20 05:07:28
【问题描述】:
我正在使用 Swift 2.0 在 iOS 9 中构建。我的起始 UIViewController 是我的菜单屏幕。它包含以下代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let id = segue.identifier where id == "GamePlayScene" {
self.gameVC = segue.destinationViewController as? GameViewController
self.gameVC!.delegate = self
if let s = sender as? GKTurnBasedMatch {
self.gameVC!.match = s
}
}
}
当 segue 到我的 GameViewController 时,以下初始化会在 prepareForSegue 甚至被调用之前运行:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
GKLocalPlayer.localPlayer().registerListener(self) // I only want this once
}
在故事板中,我的 GameViewController 有一个“菜单”按钮,该按钮连接到视图控制器的退出小部件,并按预期展开到菜单。但是每当我再次执行 segue 时,都会再次调用 init,所以我现在有多个 GameViewControllers。我认为这会减慢我的应用程序速度,因为我使用的是 SKScenes。 如何在不每次都创建新对象的情况下执行转场?
func player(player: GKPlayer, receivedTurnEventForMatch match: GKTurnBasedMatch, didBecomeActive: Bool) {
if didBecomeActive {
// This event is what activated the app, so the user wants it right meow
GameKitHelper.sharedInstance.match = match
performSegueWithIdentifier("GamePlayScene", sender: match)
}
}
【问题讨论】:
标签: ios swift uiviewcontroller storyboard