performSegueWithIdentifier:sender: 找不到我的转场

Posted

技术标签:

【中文标题】performSegueWithIdentifier:sender: 找不到我的转场【英文标题】:performSegueWithIdentifier:sender: not finding my segue 【发布时间】:2012-10-18 20:07:17 【问题描述】:

我有一个UINavigationController 和一个UITableViewController 作为rootViewController。我从表格视图的原型单元格中创建了一个 segue,并将其与另一个 UIViewController 连接起来。我的 segue 的标识符是“详细信息”。在我的表视图委托(正在调用)的tableView:didSelectRowAtIndexPath: 方法中,我有以下行:

[self.navigationController performSegueWithIdentifier:@"Details" sender:nil];

在运行我的应用程序并点击我的一个单元格时,会引发异常,因为'Receiver (<UINavigationController: 0x71c65b0>) has no segue with identifier 'Details''

这里可能出了什么问题?

编辑

当我改变时

[self.navigationController performSegueWithIdentifier:@"Details" sender:nil];

进入

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

下一个视图被推送,但我收到以下错误:

2012-10-19 12:32:05.128 Numbers[44850:c07] nested push animation can result in corrupted navigation bar
2012-10-19 12:32:17.234 Numbers[44850:c07] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-10-19 12:32:17.236 Numbers[44850:c07] Unbalanced calls to begin/end appearance transitions for <DetailViewController: 0x74a1fb0>.

显然,我不应该让我当前的视图控制器完成这项工作,而是让我的导航视图控制器(这就是它的用途)。使用返回按钮返回会导致奇怪的动画,就像警告警告我一样。

【问题讨论】:

【参考方案1】:

只是一个猜测,但您是否有可能连接 segue 通过代码触发它? 如果没有“特殊”原因,您通常不需要致电performSegueWithIdentifier:sender。相反,只需将 tableviewcells 与所需的 segue 连接即可。

但是,如果你打电话给performSegueWithIdentifier不要给它打电话!

【讨论】:

如果我没有在界面生成器中创建特定标识符,Xcode 怎么知道使用哪个 segue?我应该以编程方式创建它吗?我打电话给performSegueWithIdentifier:sender: 传递一个对象。 没关系,在prepareForSegue:sender: 方法中,我可以访问所选UITableView 行的文本标签,这使我可以将正确的数据传递给destinationViewController。谢谢!【参考方案2】:

Interface Builder 中选择UITableViewCell。将其选择触发的segue 连接到destinationViewController。在您的源代码UIViewController 中实现prepareForSegue: 函数并传递destinationViewController 所有相关信息。无需拨打performSegueWithIdentifier:

【讨论】:

【参考方案3】:

只需在您的 didselect 方法中执行此操作

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

我认为您正在其他功能中进行推送,这也是嵌套推送错误或检查情节提要中的推送序列是否正确链接到下一个视图

【讨论】:

以上是关于performSegueWithIdentifier:sender: 找不到我的转场的主要内容,如果未能解决你的问题,请参考以下文章

performSegueWithIdentifier 出现运行时错误,为啥?

iOS8 performSegueWithIdentifier 运行太慢

performSegueWithIdentifier:sender: 找不到我的转场

unwind segue / performSegueWithIdentifier: 问题

performSegueWithIdentifier 不起作用

performSegueWithIdentifier:从 didSelectRowAtIIndexPath 调用的方法缓慢显示视图