Receiver (<ViewController:>) 没有带有标识符的 segue - 从场景中启动 segue

Posted

技术标签:

【中文标题】Receiver (<ViewController:>) 没有带有标识符的 segue - 从场景中启动 segue【英文标题】:Receiver (<ViewController:>) has no segue with identifier - initiating segue from a scene 【发布时间】:2014-06-25 04:45:29 【问题描述】:

在查看了很多相关问题并尝试了几乎所有内容之后,我发布了自己的问题,以期获得满意的答复。

我的应用程序从基础 ViewController 开始,然后使用在故事板中创建的按钮的模态转场转换到 GameScene ViewController,然后呈现游戏场景。游戏结束后,我以编程方式创建按钮以从 GameScene 导航回基本 ViewController。当这个按钮被按下时,下面的代码会尝试回到基础 ViewController:

UIViewController *vc = self.view.window.rootViewController;
[vc performSegueWithIdentifier:@"BackToStartScreenSegue" sender:nil];

它调用的 segue 是通过从 GameSceneViewController 拖动到基础 ViewController 并选择 modal 作为 segue 类型来创建的。这会创建一个奇怪的 8 字形模式,其中每个视图控制器都有一个模态 segue 指向另一个。我怀疑这不是最优的。

我觉得我应该使用 unwind segue,但我不确定。我试图向 GameSceneViewController 故事板添加一个按钮,然后在游戏结束后启用它,但我无法控制它是否通过我的场景启用,但我可能做得不对。

确切的错误信息如下:* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver () has no segue with identifier 'BackToStartScreenSegue''

我还检查并再次检查了我在 segue 标识符上的拼写是否正确,并从模拟器和测试设备中删除了该应用程序,并用它重新清理和构建。

【问题讨论】:

【参考方案1】:

既然它是一个模态转场,你有没有尝试过使用

[self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

我应该在 MyScene 中使用此代码代替上面的代码吗?这样做会给出“'MyScene' 没有可见的@interface 声明选择器'dismissViewControllerAnimated:completion:'”错误。感谢您的帮助 是的。按下关闭按钮时,应运行此代码。如果您使用模态 segue 进入当前视图,则此代码应关闭当前视图并将您返回到调用此视图的视图。 你知道如何从场景中做到这一点吗?当我在此处插入此代码时收到错误消息。我尝试添加一个按钮并将 IBOutlet 连接到视图控制器中的属性,然后尝试在游戏结束时启用该按钮,但它不起作用。关于如何实现这一点的任何其他想法? 我通过使用代码让它工作: UIViewController *vc = self.view.window.rootViewController; [vcdismissViewControllerAnimated:YES 完成:nil];感谢您的帮助! 我会赞成你的回答,但我还没有声誉

以上是关于Receiver (<ViewController:>) 没有带有标识符的 segue - 从场景中启动 segue的主要内容,如果未能解决你的问题,请参考以下文章

Receiver (<ViewController>) 没有带有标识符的 segue

IOS7 tableview底部viewcontrol中的多余空间

Receiver (<ViewController:>) 没有带有标识符的 segue - 从场景中启动 segue

BroadCast Receiver的使用

Broadcat监视电量变化

Qt文档阅读笔记-Broadcast Receiver Example解析