【问题标题】:iOS - how to move between view controllers without a button pressiOS - 如何在不按下按钮的情况下在视图控制器之间移动
【发布时间】:2015-07-31 18:10:02
【问题描述】:

我正在努力将 UI 视图控制器更改为游戏结束屏幕,我计划在此屏幕上显示得分、重置和广告。我将向您展示我已经拥有的代码,然后我将在下面列出我的项目是如何设置的。

游戏会运行,但是一旦检测到接触就会出现崩溃状态

Thread 1 EXC_BAD_INSTRUCTION (code=EXC1386_INVOP,subcode=0x0)

这是我目前使用的代码...

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

var viewController: GameViewController!
var secondViewController: GameOverViewController!


override func didMoveToView(view: SKView) {

//lots of code here

func didBeginContact(contact: SKPhysicsContact) {

    if( moving.speed > 0 ) {
        moving.speed = 0;

self.viewController.performSegueWithIdentifier("GameOverViewController", sender: self)

}

我目前有以下设置:

  • 我的两个视图控制器文件GameViewController.swift & GameOverViewController.swift
  • 除了我当前的 GameViewController 视图之外,我的故事板上还有一个新的视图控制器,具有以下属性....Class:GameOverViewController & Storyboard ID:GameOVerViewController
  • 从GameViewController 到GameOverViewController 设置(推送)触发的segue
  • 然后在我的 GameScene.Swift 文件中包含以下代码

如果有人可以帮助我,那就太好了。

谢谢。

【问题讨论】:

  • 我试过 'performSegueWithIdentifier("secondViewController", sender: nil)'
  • 请编辑您的问题以包含此信息,以及您收到的错误消息的直接引用。我还建议包含比您的小样本更多的上下文。

标签: ios swift sprite-kit


【解决方案1】:

performSegue:withIdentifier: 应该可以工作,除非您没有正确设置故事板。

您在执行performSegue:withIdentifier: 时遇到什么错误?

您是否在故事板中设置了连接两个视图控制器的转场,并且该转场是否有一个名为 secondViewcontroller 的标识符?

看看这个Storyboard tutorial。

【讨论】:

  • 您好,我已经编辑了帖子以包含更多信息,我得到的崩溃错误是Thread 1 EXC_BAD_INSTRUCTION (code=EXC1386_INVOP,subcode=0x0)
  • 将 perform segue 行替换为以下行...var vc:UIViewController! = self.view?.window?.rootViewController?.presentedViewController! vc.performSegueWithIdentifier("GameOver", sender: nil)
【解决方案2】:

也许您正在尝试在没有导航堆栈的情况下推送视图控制器,如果是这种情况,请尝试以模态方式呈现您的视图控制器,并检查您是如何连接 segue 的。对不起我的英语不好。

【讨论】:

    【解决方案3】:

    将 performSegue 调用更改为

     self.viewController.performSegueWithIdentifier("DOES_NOT_EXIST", sender: self)
    

    然后重新测试。你得到同样的错误吗?如果是这样,你没有正确命名你的segue。 Interface Builder 中设置的 segue 名称必须与您尝试在代码中调用的 segue 名称完全匹配。要解决此问题:在界面构建器中选择 segue,将标识符框读取为正确的名称,更新您的 performSegue 调用以准确使用该字符串并重建。 (如果您在 Interface builder 中更新标识符,请确保在重建之前清理项目以确保拾取新符号)。

    但是,如果测试导致不同的错误,“'Receiver has no segue with identifier 'DOES_NOT_EXIST'”,那么您原来的 perform segue 调用工作正常。把它放回原来的样子。其他原因导致您的崩溃。

    【讨论】:

    • 感谢您的评论,我检查了 Segue 标识符,一切似乎都匹配。我真的被这个卡住了,你能在 GitHub 上查看我的项目吗?这是一个链接https://github.com/rich84ts/Ginger-Cat/blob/master/Ginger%20Cat/GameScene.swift#L312 该链接概述了代码所在的行。
    • 当你尝试我描述的实验时发生了什么?你收到同样的错误吗?还是“no segue identifier”错误?
    • 这很奇怪,在模拟器上我收到同样的错误,但是当我使用我的手机时,我以前从未见过的文件上显示了一个不同的错误(0 函数签名专业化)Thread 1: EXC_Breakpoint (code =1, subcode=0x10072d474有什么想法吗?
    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多