【问题标题】:iPhone [self performseguewithidentifier... ] is not showing the new view controlleriPhone [self performeguewithidentifier...] 没有显示新的视图控制器
【发布时间】:2012-06-20 11:02:41
【问题描述】:

我一直在使用 stackoverflow 和整个 Google,但我似乎无法弄清楚这一点。这是我的场景:

我有我的应用程序的“主屏幕”,用户首先在其中决定他们将要做什么。该应用程序使用通过“导入”XML 文件创建的 CoreData 数据库。用户可以选择在我的应用程序中打开附加到电子邮件的 XML 文件,这会自动触发我的主屏幕显示并运行文件的导入。

我可以毫无问题地做到这一点。在我的故事板中,我有一个名为 ParseSegue 的 segue 从我的主屏幕到一个视图控制器,该控制器将处理解析并为用户提供一些状态信息。

当通过电子邮件应用调用主屏幕时,主屏幕会自动调用

[self performSegueWithIdentifier:@"ParseSegue" sender:self];

然后我在 prepareForSegue 中检查这个 segue 名称,它是一个有效的名称。这是我将文件 URL 分配给解析器控制器的地方,以便它可以解析正确的文件。

问题是转场从未真正发生过。 prepareForSegue 方法被调用,名称“ParseSegue”可以被检查并且是有效的,但是 segue 本身根本不会发生。如果我在主屏幕上添加一个按钮并告诉它在情节提要中执行 segue,它就可以正常工作。但以编程方式调用它似乎无济于事。

【问题讨论】:

  • 您能否检查prepareForSeguesegue 对象的destinationViewControllersourceViewController 属性并告诉我们它们是什么?我不确定是什么导致这些错误,但如果是的话,至少会是一个线索。此外,如果您没有检查区分大小写的问题,那可能是个好主意。我不确定 segue 标识符是否区分大小写,但如果是,我不会感到惊讶。
  • Paul,在“prepareForSegue”中,我为目标和源显示了有效的视图控制器。目的地显示了我的解析器视图控制器的一个实例(在情节提要中分配),而源显示了我的主视图控制器的一个实例。
  • 好的。您是否有机会在调用performSegueWithIdentifier 的函数中发布其余代码?据我所见,调用performSegueWithIdentifier 之后的函数中的任何语句都在prepareForSegue 触发之后运行,但在segue 本身实际触发之前,因此其中可能有一些有趣的东西。
  • 我已经做了一些事情来将其简化为基础知识和一些测试。我添加了一个名为 TestButton 的按钮,按下时会触发 testButtonPushed。这个方法中唯一的代码行是[self performSegueWithIdentifier:@"NewParse" sender:self];,当用户按下这个按钮时,新的视图控制器就会出现。 XML-opening hook 调用的函数现在只包含一行代码:[self testButtonPushed];,并且不会出现新屏幕。两种技术都在 prepareForSegue 方法中注册,并具有相同的有效检查。
  • 我相信我可能正在做某事。我认为问题出在从其他应用程序注册 URL 的代码中。我实际上是在创建我的主视图控制器的一个单独实例,一个没有显示在屏幕上的实例。这不是故意的,但我相信这是正在发生的事情。如果最终结果是这样,我会进一步调查并更新答案。

标签: iphone ios segue xcode-storyboard uistoryboardsegue


【解决方案1】:

事实证明,我完全看错了地方。我的问题是,在我的 appDelegate 中,应用程序对传入的 URL 做出反应,我无意中创建了故事板和主视图控制器的新实例。这与已经处于活动状态且可能出现或未出现在屏幕上的那个不同。

我创建的控制器从未真正显示出来。我只注意到这一点,因为日志:

NSLog(@"Source: %@", [segue.sourceViewController description]);

会为我的测试(按钮按下)和导入测试显示不同的内存地址。这让我相信我实际上是在使用故事板的两个不同实例和应用程序的主视图控制器。感谢 Paul 关于记录目标和源控制器的建议。

【讨论】:

  • 你可以接受你自己的答案:),在这种情况下没有错。
  • 完成:-)。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多