【发布时间】: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,它就可以正常工作。但以编程方式调用它似乎无济于事。
【问题讨论】:
-
您能否检查
prepareForSegue中segue对象的destinationViewController和sourceViewController属性并告诉我们它们是什么?我不确定是什么导致这些错误,但如果是的话,至少会是一个线索。此外,如果您没有检查区分大小写的问题,那可能是个好主意。我不确定 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