【问题标题】:performSegueWithIdentifier produce no segue with identifier errorperformSegueWithIdentifier 不产生带有标识符错误的 segue
【发布时间】:2013-09-27 00:38:54
【问题描述】:

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

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

我所做的是:

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

  5. 步骤:在视图控制器 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.
}

我做错了什么???

【问题讨论】:

  • 不看任何要检查的东西,我相信你应该打电话给[self performSegue...]而不是[self.navigationController perfo...]
  • 有时是我们没有想到的简单事情

标签: ios objective-c uinavigationcontroller segue


【解决方案1】:

您在self.navigationController 上调用performSegueWithIdentifier:sender:,但您在View controller A 上设置了segue:

通过 push segue 将视图控制器 A 连接到视图控制器 B 标识符“identA”

尝试替换:

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

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

【讨论】:

  • 但是当你这样做的时候你怎么popViewController呢?
  • @stefanB,swift 2.0 的等价物是什么?这个:self.performSegueWithIdentifier("loginView", sender: self);
【解决方案2】:

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

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

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

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

最终,我找到了原因。

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

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

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

(叹气。)

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

我需要一杯啤酒……

【讨论】:

    【解决方案3】:

    好的。这里有点特殊情况,但在我的情况下,我在一个新项目中设置了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 保留为活动状态。在这种情况下,我不需要它,因此可以将其删除。一旦删除它,它就可以正常工作。
    希望我现在可以把这头发放回去……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多