“pushViewController”到自己的类,然后是“performSegueWithIdentifier”,导致“接收者没有标识符的segue”

Posted

技术标签:

【中文标题】“pushViewController”到自己的类,然后是“performSegueWithIdentifier”,导致“接收者没有标识符的segue”【英文标题】:"pushViewController" to own class followed by "performSegueWithIdentifier" resulting in "Receiver has no segue with identifier" 【发布时间】:2012-09-10 14:15:23 【问题描述】:

我有这个主菜单视图控制器——它不是在我的故事板中定义两次,中间有segues,而是在它自己的类的一个新实例上调用pushViewController。就这样:

menu_a --> menu_a --> option_x

而不是

menu_a --> menu_b --> option_x

在推送视图控制器一次后,navigationController 失去了对相关转场的跟踪,我收到“接收者没有带标识符的转场”消息。也就是说,

menu_a --> option_y

从不产生这种错误。

过去三个小时,我在 Google 上搜索并搜索了 Stack Overflow,但没有成功。 我希望有人尝试过同样的事情,并希望详细说明解决方法。

【问题讨论】:

恭喜您的第一篇文章!如果您提供有关您的问题的具体细节,包括源代码和屏幕截图等内容,其他人会更容易帮助您。虽然您确实对您的问题提供了良好的高级描述,但您可以通过包括例如改进您的问题。比“主菜单视图控制器 -thing”更具体的术语;实例化和推送新视图控制器的实际源代码;以及您已经找到的任何没有帮助的解决方案。希望这可以帮助您回答您的问题! 【参考方案1】:

我不能保证这会奏效,但这里是:

大概是因为 segues 是 Storyboard 功能,调用 performSegue 是指回您的由 Storyboard 实例化的 ViewController。如this question 中所述,可以请求您的故事板从自身实例化一个新的 ViewController,而不是手动创建它(我认为您正在这样做)。

UIStoryboard* storyboard = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
UIViewController* dest = [storyboard instantiateViewControllerWithIdentifier:@"CustomController"];

尝试从以这种方式创建的 ViewController 中的 segue 可能会更幸运,因为它应该具有关联的相同 segue 信息,而手动创建的则不会)。这只是一个理论——让我知道它是否有效:)

【讨论】:

这看起来比我选择的(希望是)临时解决方案更好:我在情节提要的视图控制器上创建了一个不可见的按钮,并且允许它开始对父级进行 segue视图控制器。我只是通过它的标识符触发该 segue,因此它仍然保留其他可用的 segue。 (使用按钮仍然很笨拙 - 我明天试试你的方法!非常感谢。)

以上是关于“pushViewController”到自己的类,然后是“performSegueWithIdentifier”,导致“接收者没有标识符的segue”的主要内容,如果未能解决你的问题,请参考以下文章

带有在另一个类中声明的 pushViewController 的 UIButton

如何使用 PushViewController 方法从 UIViewClass 导航到 UIViewController 类

使用 pushViewController 加载 TableViewController 后没有发生 Ios-Segue 到 UIViewController

无法识别的选择器发送到实例,UITabBarController pushViewController:animated:

PushViewController 全屏

pushViewController 只是有时