0

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

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

于 2012-06-18T15:42:50.770 回答