我已经遍布stackoverflow,遍布谷歌,我似乎无法想出这个。这是我的情景:
我有我的应用程序的“主屏幕”,用户首先决定他们将要做什么。该应用程序使用CoreData数据库,该数据库是通过“导入”XML文件创建的。用户可以选择在我的应用程序中打开附加到电子邮件的XML文件,该文件会自动触发我的主屏幕以显示并运行该文件的导入。
我可以毫不费力地做到这一点。在我的故事板中,我有一个名为ParseSegue的segue,从我的主屏幕到一个视图控制器,它将处理解析并为用户提供一些状态信息。
当通过电子邮件应用程序调用主屏幕时,主屏幕会自动调用
[self performSegueWithIdentifier:@"ParseSegue" sender:self];
然后我在prepareForSegue中检查这个segue名称,它是一个有效的名称。这是我将文件URL分配给解析器控制器的位置,以便它可以解析正确的文件。
问题是segue从未真正发生过。调用prepareForSegue方法,可以检查名称“ParseSegue”并且它是有效的,但segue本身根本不会发生。如果我在主屏幕上添加一个按钮并告诉它在故事板中执行segue,它可以正常工作。但是以编程方式调用它似乎什么都不做。
答案 0 :(得分:0)
事实证明我完全是在错误的地方。我的问题是,在我的appDelegate中,应用程序对传入的URL作出反应,我无意中创建了我的故事板和我的主视图控制器的新实例。这与已经活跃且可能已经或可能不在屏幕上的那个不同。
我创建的控制器实际上从未显示过。我只注意到这一点,因为日志:
NSLog(@"Source: %@", [segue.sourceViewController description]);
会为我的测试(按钮按下)和导入测试显示不同的内存地址。这让我相信我实际上正在使用故事板的两个不同实例和应用程序的主视图控制器。感谢Paul提供了记录目标和源控制器的建议。