performSegueWithIdentifier不产生带有标识符错误的segue

时间:2013-09-27 00:38:54

标签: ios objective-c uinavigationcontroller segue

我很难让performSegueWithIdentifier工作。 我一直在

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

我所做的是:

  1. 步骤:创建单个视图应用程序并添加标签 - “查看控制器A”到视图控制器。
  2. 步骤:拖放另一个视图控制器并添加一个标签 - “查看控制器B”到新的视图控制器。
  3. 步骤:选择视图控制器A并执行编辑器 - &gt;嵌入 - >导航控制器
  4. 步骤:有线视图控制器A到视图控制器B,带有标识符“identA”的push segue像这样: wiring the seque

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


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

    我做错了什么???

3 个答案:

答案 0 :(得分:26)

您正在performSegueWithIdentifier:sender:上呼叫self.navigationController,但您在View controller A上设置了segue:

  

有线视图控制器A使用push segue查看控制器B.   标识符“identA”

尝试更换:

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

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

答案 1 :(得分:4)

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

我写了许多iPad&amp;之前的iPhone应用程序,使用Master-Detail页面,导航控制器等,但今天,我很难过,因为我在XCode 5.1中的简单的双屏iPhone应用程序拒绝让我在UINavigationController中从一个屏幕转到另一个屏幕。

这是另一个疯狂的XCode错误,没有任何意义。我甚至可以创建一个 new XCode项目,在那里,相同的segue可以完美地工作。

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

最终,我找到了原因。

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

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

enter image description here

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

(叹气。)

我希望这有助于其他XCode受害者。

我需要一杯啤酒......

答案 2 :(得分: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];
}

在主视图中按下单元格时,它会触发方法但不执行任何操作。事实证明问题是这样的: enter image description here

我在主表格视图单元格和详细导航控制器之间保留了默认的segue。在这种情况下,我不需要它,所以能够删除它。一旦删除它,它应该完美地工作 希望我现在能把这头发放回去......