我很难让performSegueWithIdentifier工作。 我一直在
"Receiver (<UINavigationController: 0x1e59a9d0>) has no segue with
identifier 'identA'"
我所做的是:
步骤:有线视图控制器A到视图控制器B,带有标识符“identA”的push segue像这样:
步骤:在视图控制器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.
}
我做错了什么???
答案 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文件,并手动添加一行,告诉您的应用程序主故事板的名称。
如果你不这样做,奇怪的是,你的应用将成功构建,将运行,你可能会得到你的第一个屏幕成功显示...但事情(如找到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];
}
在主视图中按下单元格时,它会触发方法但不执行任何操作。事实证明问题是这样的:
我在主表格视图单元格和详细导航控制器之间保留了默认的segue。在这种情况下,我不需要它,所以能够删除它。一旦删除它,它应该完美地工作 希望我现在能把这头发放回去......