Segue只工作一次?

时间:2016-05-09 22:08:16

标签: ios swift sprite-kit

您好我使用SpriteKit制作了游戏,并希望使用UITableView添加排行榜。我的segues完美地从我的GameViewController到TableViewController并返回。但是我只能这样做一次。一旦我回到GameViewController,点击同一个按钮就不会再带我去TableViewController了。为什么会这样?

我进行了设置,因此当点击某个SKSpriteNode时,它会转移到TableViewController。目前我正在使用这行代码从GameViewController转换为TableViewController(此代码在GameScene.swift中)

self.view!.window!.rootViewController!.performSegueWithIdentifier("showScores", sender: self)

然后我在导航栏中设置了一个Back按钮并创建了一个返回GameViewController的segue(通过将BarButtonItem拖到GameViewController并选择presentModally)。一些帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你正在向排行榜发出挑战,但是在这个过程中将主游戏视图添加到堆栈而不是删除排行榜,所以当你再次尝试再次进行时,它不是可见的游戏场景电话。

尝试在排行榜代码中使用此而不是segue(您要求重新回到游戏场景中):

self.dismissViewControllerAnimated(true, completion: nil)

如果不起作用,请使用代理人请求游戏场景解除排行榜。

编辑:我一直在漫无目的地为评论增加了字数,所以我想在这里添加我的解释!

将堆栈视为一堆纸,其中每张纸都是viewController,最顶层的部分是可见的(自然)。当您以模态方式segue或呈现viewController时,您正在向堆栈添加viewController或“向您的堆中添加一张纸”。一般来说,这是一个糟糕的主意,因为你正在向堆栈中添加越来越多的“纸张”。你往往会遇到记忆问题和/或烦躁的错误:P。相反,以编程方式返回的最佳实践是做两件事之一:如果你使用的是navigationController,你应该调用popViewControllerAnimated,或者如果你不是,就像在这种情况下,你应该使用dismissViewControllerAnimated。这两个功能都将最上面的“纸张”完全从堆栈中取出。修复了不断将viewControllers添加到堆栈的问题。如果其中任何一个令人困惑(我在手机上写这个就可能!)只是给我发一条评论或消息,我会试着更好地解释! :)