11

我很难让 performSegueWithIdentifier 工作。我不断得到

"Receiver (<UINavigationController: 0x1e59a9d0>) has no segue with
 identifier 'identA'"

我所做的是:

  1. 步骤:创建一个单一的视图应用程序并添加一个标签 - “视图控制器 A” 到视图控制器。
  2. 步骤:拖放另一个视图控制器,并在新视图控制器中添加一个标签 - “视图控制器 B”。
  3. 步骤:选择视图控制器A并执行编辑器->嵌入->导航控制器
  4. 步骤:使用带有标识符“identA”的推送序列将视图控制器 A 连接到视图控制器 B 像这样: 连线

  5. 步骤:在View控制器A的ViewDidLoad上添加了对performSegueWithIdentifier的调用。像这样:


- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.navigationController performSegueWithIdentifier:@"identA" sender:self];
    // Do any additional setup after loading the view, typically from a nib.
}

我做错了什么???

4

3 回答 3

26

您正在打电话performSegueWithIdentifier:sender:self.navigationController但您在以下位置设置了 segue View controller A

使用带有标识符“identA”的推送序列将视图控制器 A 连接到视图控制器 B

尝试更换:

[self.navigationController performSegueWithIdentifier:@"identA" sender:self];

[self performSegueWithIdentifier:@"identA" sender:self];
于 2013-09-27T00:56:37.067 回答
4

只是另一个建议(今天救了我)......

我以前写过很多 iPad 和 iPhone 应用程序,使用 Master-Detail 页面、导航控制器等,但今天,我被难住了,因为我在 XCode 5.1 中的简单两屏 iPhone 应用程序拒绝让我从一个屏幕切换到另一个屏幕,在 UINavigationController 中。

这是另一个毫无意义的疯狂 XCode 错误。我什至可以创建一个的XCode 项目,在那里,同样的 segue 可以完美地工作。

    [self performSegueWithIdentifier:@"segueTest" sender:nil];

最终,我找到了原因。

我在 XCode 中创建了一个空白项目,手动将 Storyboard 添加到我的项目中,但是,我错过了一步。

当您自己添加 Storyboard 时,您还需要进入您的 .plist 文件,并手动添加一行告诉您的应用程序您的主故事板的名称。

在此处输入图像描述

如果您不这样做,奇怪的是,您的应用程序成功构建,它将运行,您可能会成功显示您的第一个屏幕......但是随后事情(例如查找 segue 名称)将开始出错。

(叹。)

我希望这可以帮助其他 XCode 受害者。

我需要一杯啤酒...

于 2014-03-28T14:25:10.647 回答
0

行。这里有点特殊情况,但在我的情况下,我UISplitViewController在一个新项目中进行了设置。在主表视图中按下一个单元格后,我想在详细视图控制器中执行一个 segue。所以在didSelectRowAtIndexPath:我执行的主表中

[[NSNotificationCenter defaultCenter]postNotificationName:@"userDetails"
                                                           object:nil];

在详细视图中viewDidLoad:我添加了观察者和实例方法

[[NSNotificationCenter defaultCenter]addObserver:self
                                        selector:@selector(userDetailsShow)
                                            name:@"userDetails"
                                          object:nil];
-(void)userDetailsShow{
    [self performSegueWithIdentifier:@"userDetails" sender:nil];
}

在主视图中按下单元格时,它会触发该方法但什么也不做。原来问题是这样的: 在此处输入图像描述

我已将主表视图单元格和详细导航控制器之间的默认 segue 保留为活动状态。在这种情况下,我不需要它,因此可以将其删除。一旦删除它,它就可以完美地工作,因为它应该。
希望我现在可以把这头发放回去……

于 2016-01-10T09:31:02.920 回答